【问题标题】:Are Rails engines supposed to come with an environment.rb?Rails 引擎应该带有 environment.rb 吗?
【发布时间】:2013-02-08 10:54:26
【问题描述】:

我最近创建了我的第一个 Rails 引擎。 /config 中唯一的东西是 routes.rb - 没有 environment.rbapplication.rb 或类似的东西。

当我安装 rspec-rails gem 并尝试运行我的规范时,我收到一条错误消息,说它找不到 environment.rb,这并不奇怪,因为 environment.rb 不存在。

令我困惑的是,我所拥有的证据告诉我必须是以下两种情况之一:

1) Rails 引擎带有environment.rb,您需要手动创建environment.rbapplication.rb 等。 这似乎不太可能。

2) Rails 引擎确实带有environment.rb,但我的引擎碰巧因为某种原因丢失了它。 这似乎也不太可能。不过,我对这个在引擎中引用 environment.rb 的答案感到困惑:Testing Rails 3.1 mountable engine with Rspec

所以我的问题是:Rails 引擎是否应该带有environment.rb,如果没有,如果你想要/需要一个,你应该如何创建一个?

【问题讨论】:

    标签: ruby-on-rails rails-engines


    【解决方案1】:

    使用虚拟应用的environment.rb 文件。

    要设置 RSpec:

    将以下内容添加到您的 spec_helper.rb 文件中。

    ENV["RAILS_ENV"] ||= 'test'
    require File.expand_path("../../test/dummy/config/environment", __FILE__)
    ...
    

    添加引擎根目录也很有帮助。

    ENGINE_RAILS_ROOT = File.join(File.dirname(__FILE__), '../')
    

    如果您想访问引擎的路由助手,请在 RSpec.configure 块中添加以下内容。

    # This will include the routing helpers in the specs so that we can use
    # <engine>_path, etc., to get to the routes.
    config.include <RailsEngine>::Engine.routes.url_helpers
    

    希望对您有所帮助。

    【讨论】:

    • 做到了,谢谢。之前我不明白“dummy”是一个实际的东西,而不仅仅是像“foo”或“your-app-name-here”这样的占位符。另外,我对您的答案做了几个小版本,因为我必须调整您的路径才能让我的规范真正运行。
    【解决方案2】:

    Rails 引擎可能有环境文件,但它们不需要它们。我建议不要使用它们,因为您的应用程序可能会(作为 gem)安装在另一个应用程序中,这使得从主 rails 应用程序中配置引擎变得非常困难。

    您最好使用可在主 rails 应用程序中配置的 yml 文件,并允许该 rails 应用程序实现特定于环境的配置。这并不意味着你不能在你的 Rails 引擎中拥有一些基于环境环境文件的默认值,而是说允许外部配置通常会让生活变得更容易。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-26
      • 1970-01-01
      • 2015-12-30
      • 1970-01-01
      • 1970-01-01
      • 2020-07-09
      • 1970-01-01
      相关资源
      最近更新 更多