首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >upstart + bluepill + unicorn & delayed_job与rvm和bundler:‘`exec':没有这样的文件或目录

upstart + bluepill + unicorn & delayed_job与rvm和bundler:‘`exec':没有这样的文件或目录
EN

Stack Overflow用户
提问于 2012-01-05 10:43:21
回答 1查看 1.9K关注 0票数 0

我正在努力让我的独角兽和delayed_job进程不会重启。我决定使用bluepill作为整体管理器,因为在Ubuntu中可以很容易地启动upstart。我已经为bluepill创建了一个RVM包装器,并且upstart脚本运行良好(轻松地启动和停止:

代码语言:javascript
复制
# 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配置文件:

代码语言:javascript
复制
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时,当它试图引导它时,我会得到这样的结果:

代码语言:javascript
复制
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?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-13 11:18:09

好的,所以最后很简单。我认为发生的事情是,我在全局rvm gemset中安装了bluepill作为root,并在环境中创建了我的包装器来使用全局gemset (意思是bluepill开始时没有问题,但它没有在我合适的gemset中看到任何其他gem(保修))。我基本上将bluepill从global gemset中删除,并将其安装在保修gemset中。然后我再次创建了包装器:

代码语言:javascript
复制
rvmsudo rvm wrapper ruby-1.9.2-p290@warranty bootup bluepill

我还遇到了另一个奇怪的错误,当我试图启动独角兽,但意识到我没有传递RAILS_ENV。这是我的最终.pill:

代码语言:javascript
复制
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集。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8736962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档