我在heroku上將應用程序部署爲測試,並將亞馬遜部署爲生產。在測試和開發(本地)上,我使用了postgresql,並在Amazon EC2上使用了Mysql。所以我希望只在測試和開發時加載pg gem,並且在生產時加載mysql2 gem。rails 4爲開發,測試和生產指定寶石
解決此問題的最佳做法是什麼?
感謝
我在heroku上將應用程序部署爲測試,並將亞馬遜部署爲生產。在測試和開發(本地)上,我使用了postgresql,並在Amazon EC2上使用了Mysql。所以我希望只在測試和開發時加載pg gem,並且在生產時加載mysql2 gem。rails 4爲開發,測試和生產指定寶石
解決此問題的最佳做法是什麼?
感謝
最好的做法是使用同一個數據庫管理系統的開發,測試和生產。但我懷疑這是你想聽到的...
無論如何,bundler不支持這種情況。也就是說,你不能簡單地告訴它不要在給定的環境中安裝某些寶石 - 即使它們不會被使用。您可以通過在group
塊中聲明它們(作爲@ mind.blank提議)來聲明它們不會加載某些寶石,但它們仍將被安裝。但是,您可以使用簡單的紅寶石構造,即if-else
或case
塊,只在特定條件下運行某些代碼(並加載/安裝某些寶石)。
問題在於您的Gemfile.lock文件在您的部署中將不同步 - 這不是捆綁器(或Capistrano)所期望的。但有些標誌可以用來告訴你的部署忽略Gemfile.lock文件,並且基於它讀取Gemfile,如果你真的想要...
是否Gemfile中行爲不同的Rails 3.2和Rails 4?
如果沒有,那麼你可以指定哪些創業板應該在環境中加載:
group :development, :test do
gem "pg"
end
group :production do
gem "mysql2"
end
通過'loaded on'你的意思是加載到內存中,使用,還是乾脆安裝? – PinnyM
@PinnyM對不起,我的意思是加載到內存中並使用 –
然後@ mind.blank的答案應該適合你。 – PinnyM