2013-02-22 68 views
4

我最近創建了我的第一個Rails引擎。在/config唯一的事是routes.rb - 沒有environment.rbapplication.rb或類似的東西。Rails引擎是否應該帶有environment.rb?

當我安裝了rspec-rails寶石想跑我的規格,我得到了一個錯誤說,它無法找到environment.rb,這並不奇怪,因爲environment.rb不存在。

混亂的事情對我來說是證據我已經告訴我的兩件事情一定是這樣的:

1)Rails的引擎拿出一個environment.rb,你就有望創造手工製作。 這似乎不太可能。

2)Rails的引擎配備了environment.rb,但我的引擎發生丟失它無論出於何種原因。 這似乎也不太可能。我很困惑,不過,這個答案是指environment.rb在發動機:Testing Rails 3.1 mountable engine with Rspec

所以我的問題是:都應該拿出一個environment.rb Rails的引擎,如果沒有,怎麼是你應該建立一個如果你想/需要一個?

回答

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 

希望有所幫助。

+0

這樣做,謝謝。在此之前我不明白「虛擬」是實際的東西,不僅僅是像「foo」或「your-app-name-here」這樣的佔位符。另外,我爲你的答案做了幾個小版本,因爲我必須調整你的路徑才能讓我的規格真正運行。 – 2013-02-22 18:40:46

0

Rails引擎可能有環境文件,但他們不需要它們。我會建議他們,因爲你的應用程序可能會被掛載(作爲一個寶石)在另一個應用程序中,這使得從主軌應用程序中配置引擎非常困難。

建議您使用yml文件,該文件可以在主要rails應用程序中配置,並允許rails應用程序實現特定於環境的配置。這並不意味着你不能在你的Rails引擎中有一些基於環境環境文件的默認值,而是通常使得外部配置更容易。