0
我正在開發控制其他rails應用程序的主軌應用程序。它有一個bash腳本來啓動這些rails應用程序,並且它在手動調用命令行時運行良好。如何在Rails中啓動一個全新的進程,而不繼承當前的環境變量?
但是,如果我在事件欄應用程序中調用它,使用backticks
,system
或exec
,腳本將失敗。
的錯誤信息是:
unicorn_rails worker[0] -c ../configs/unicorns/c5.rb -E production must be run inside RAILS_ROOT: #<Gem::LoadError: can't activate rack (~> 1.0.0, runtime), already activated rack-1.2.1. Make sure all dependencies are added to Gemfile
.>
這裏是bash的文件:
cp configs/Gemfile* $1
cd $1
bundle
bundle exec unicorn_rails -c ../configs/unicorns/$1.rb -E production
如何解決這樣的問題呢?
正如你所看到的,我使用bundle exec
開始子進程,它應該有它自己的寶石加載,對吧?
這不會影響正在運行的父進程嗎? – Cheng 2010-10-25 09:55:45
它可以,如果你在當前正在運行的進程有機會解析ENV之前這樣做。如果這是一個問題,那麼複製當前的ENV,調整它併產生你的子進程,然後恢復它。在這一點上,兒童進程應該有他們自己的有限ENV的副本。 – 2010-10-25 21:16:56
很酷,我發現你可以簡單的'fork do {}'並在ruby 1.9中改變'fork block'中的ENV。謝謝! – Cheng 2010-10-26 17:26:36