2013-05-21 30 views
1

我在heroku上將應用程序部署爲測試,並將亞馬遜部署爲生產。在測試和開發(本地)上,我使用了postgresql,並在Amazon EC2上使用了Mysql。所以我希望只在測試和開發時加載pg gem,並且在生產時加載mysql2 gem。rails 4爲開發,測試和生產指定寶石

解決此問題的最佳做法是什麼?

感謝

+0

通過'loaded on'你的意思是加載到內存中,使用,還是乾脆安裝? – PinnyM

+0

@PinnyM對不起,我的意思是加載到內存中並使用 –

+0

然後@ mind.blank的答案應該適合你。 – PinnyM

回答

1

最好的做法是使用同一個數據庫管理系統的開發,測試和生產。但我懷疑這是你想聽到的...

無論如何,bundler不支持這種情況。也就是說,你不能簡單地告訴它不要在給定的環境中安裝某些寶石 - 即使它們不會被使用。您可以通過在group塊中聲明它們(作爲@ mind.blank提議)來聲明它們不會加載某些寶石,但它們仍將被安裝。但是,您可以使用簡單的紅寶石構造,即if-elsecase塊,只在特定條件下運行某些代碼(並加載/安裝某些寶石)。

問題在於您的Gemfile.lock文件在您的部署中將不同步 - 這不是捆綁器(或Capistrano)所期望的。但有些標誌可以用來告訴你的部署忽略Gemfile.lock文件,並且基於它讀取Gemfile,如果你真的想要...

1

是否Gemfile中行爲不同的Rails 3.2和Rails 4?
如果沒有,那麼你可以指定哪些創業板應該在環境中加載:

group :development, :test do 
    gem "pg" 
end 

group :production do 
    gem "mysql2" 
end 
+0

這不會在運行時加載不需要的gem,但會安裝它。 – PinnyM

+0

@PinnyM哦,我明白了,我已經改變加載到安裝。如果這不是OP正在尋找的東西,我會刪除答案。 –

+0

我不確定我自己是什麼意思,等待澄清...;)但你第一次就做對了。無論如何,它都將被安裝,但只會在指定的組環境中加載。 – PinnyM