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