我正在努力让我的独角兽和delayed_job进程不会重启。我决定使用bluepill作为整体管理器,因为在Ubuntu中可以很容易地启动upstart。我已经为bluepill创建了一个RVM包装器,并且upstart脚本运行良好(轻松地启动和停止:
# bluepill - process monitor
#
# simple process monitoring tool
description "simple process monitoring tool"
start on started nginx
stop on stopping nginx
expect daemon
#respawn
exec bootup_bluepill load /home/deployer/apps/nzswarranty/current/config/production.pill接下来是bluepill配置文件:
Bluepill.application("nzswarranty", :log_file => "/var/log/bluepill.log") do |app|
app.working_dir = '/home/deployer/apps/nzswarranty/current'
app.uid = "deployer"
app.gid = "staff"
app.process("unicorn") do |process|
process.start_command = "bundle exec unicorn_rails -c config/unicorn.rb -D"
process.stop_command = "kill -s QUIT `cat /tmp/unicorn.nzswarranty.pid`"
process.restart_command = "kill -s USR2 `cat /tmp/unicorn.nzswarranty.pid`"
process.pid_file = '/tmp/unicorn.nzswarranty.pid'
process.start_grace_time = 15.seconds
process.stop_grace_time = 15.seconds
end
app.process("delayed_job") do |process|
process.environment = { 'RAILS_ENV' => 'production' }
process.start_command = 'script/delayed_job start'
process.stop_command = 'script/delayed_job stop'
process.pid_file = '/home/deployer/apps/nzswarranty/shared/pids/delayed_job.pid'
process.start_grace_time = 15.seconds
process.stop_grace_time = 15.seconds
end
end服务器安装了系统范围的RVM,并使用bundler管理gem。我应该提一下,这是一个Rails 3.1应用程序。
基本上,当我在没有运行delayed_job的情况下启动bluepill时,当它试图引导它时,我会得到这样的结果:
W, [2012-01-05T13:37:55.185626 #28201] WARN -- : [nzswarranty:delayed_job] Start command execution returned non-zero exit code:
W, [2012-01-05T13:37:55.185780 #28201] WARN -- : [nzswarranty:delayed_job] {:stdout=>"", :stderr=>"/usr/local/rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require': no such file to load -- bundler/setup (LoadError)\n\tfrom /usr/local/rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'\n\tfrom /home/deployer/apps/nzswarranty/current/config/boot.rb:6:in `<top (required)>'\n\tfrom <internal:lib/rubygems/custom_require>:29:in `require'\n\tfrom <internal:lib/rubygems/custom_require>:29:in `require'\n\tfrom /home/deployer/apps/nzswarranty/current/config/application.rb:1:in `<top (required)>'\n\tfrom <internal:lib/rubygems/custom_require>:29:in `require'\n\tfrom <internal:lib/rubygems/custom_require>:29:in `require'\n\tfrom /home/deployer/apps/nzswarranty/current/config/environment.rb:2:in `<top (required)>'\n\tfrom <internal:lib/rubygems/custom_require>:29:in `require'\n\tfrom <internal:lib/rubygems/custom_require>:29:in `require'\n\tfrom script/delayed_job:3:in `<main>'\n", :exit_code=>1}
I, [2012-01-05T13:37:55.186003 #28201] INFO -- : [nzswarranty:delayed_job] Going from down => starting我也尝试过使用bundle exec来解决这个问题,但它显示找不到捆绑包可执行文件。我的怀疑是环境没有正确加载。有什么建议吗?我有一个RVM gemset,它是从项目根目录下的.rvmrc文件中加载的。我是否也应该在bluepill配置中切换到这个gemset?
发布于 2012-01-13 11:18:09
好的,所以最后很简单。我认为发生的事情是,我在全局rvm gemset中安装了bluepill作为root,并在环境中创建了我的包装器来使用全局gemset (意思是bluepill开始时没有问题,但它没有在我合适的gemset中看到任何其他gem(保修))。我基本上将bluepill从global gemset中删除,并将其安装在保修gemset中。然后我再次创建了包装器:
rvmsudo rvm wrapper ruby-1.9.2-p290@warranty bootup bluepill我还遇到了另一个奇怪的错误,当我试图启动独角兽,但意识到我没有传递RAILS_ENV。这是我的最终.pill:
Bluepill.application("nzswarranty", :log_file => "/var/log/bluepill.log") do |app|
app.working_dir = '/home/deployer/apps/nzswarranty/current'
app.uid = 'deployer'
app.gid = 'staff'
app.environment = { 'RAILS_ENV' => 'production' }
app.process("unicorn") do |process|
process.start_command = "bundle exec unicorn_rails -c config/unicorn.rb -D"
process.stop_command = "kill -s QUIT `cat /tmp/unicorn.nzswarranty.pid`"
process.restart_command = "kill -s USR2 `cat /tmp/unicorn.nzswarranty.pid`"
process.pid_file = '/tmp/unicorn.nzswarranty.pid'
process.start_grace_time = 30.seconds
process.stop_grace_time = 30.seconds
end
app.process("delayed_job") do |process|
process.start_command = 'bundle exec script/delayed_job start'
process.stop_command = 'bundle exec script/delayed_job stop'
process.pid_file = '/home/deployer/apps/nzswarranty/shared/pids/delayed_job.pid'
process.start_grace_time = 30.seconds
process.stop_grace_time = 30.seconds
end
end重要的是要注意,我们需要在其他命令之前使用bundle exec,以便从Gemfile加载完整的gem集。
https://stackoverflow.com/questions/8736962
复制相似问题