Rails引擎是否应该带有environment.rb?

时间:2013-02-22 18:20:06

标签: ruby-on-rails rails-engines

我最近创建了我的第一个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.rbTesting Rails 3.1 mountable engine with Rspec

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

2 个答案:

答案 0 :(得分:3)

使用虚拟应用的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

希望有所帮助。

答案 1 :(得分:0)

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

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