ruby-on-rails - Foreman rvm upstart 不工作

标签 ruby-on-rails rvm bundle upstart foreman

Unicorn 不是由 upstart 脚本运行的。

rvm 1.25.23 ruby 2.1.1 rails 4.1

配置/部署.rb

  desc 'Foreman init'
  task :foreman_init do
    on roles(:all) do
      foreman_temp = "/home/deployer/tmp/foreman"
      execute  "mkdir -p #{foreman_temp}"
      execute "ln -s #{release_path} #{current_path}"
      within current_path do
        execute "cd #{current_path}"
        execute :bundle, "exec foreman export upstart #{foreman_temp} -a #{application} -u deployer -l /home/deployer/apps/#{application}/log -d #{current_path}"
      end
      sudo "mv #{foreman_temp}/* /etc/init/"
      sudo "rm -r #{foreman_temp}"
    end
  end

/etc/init/depl-web-1.conf
start on starting depl-web
stop on stopping depl-web
respawn

env PORT=5000

setuid deployer

chdir /home/deployer/apps/depl/current

exec bundle exec unicorn_rails -c /home/deployer/apps/depl/current/config/unicorn.rb -E production

/log/upstart/depl-web-1.log 和 production.log 清除

如果您转到应用程序的目录并手动运行命令
bundle exec unicorn_rails -c /home/deployer/apps/depl/current/config/unicorn.rb -E production

unicorn 成功上线。

如果在/etc/init/depl-web-1.conf exec 行添加端口

exec bundle exec unicorn_rails -p $PORT -c
/home/deployer/apps/depl/current/config/unicorn.rb -E production

错误:
/bin/sh: 1: exec: bundle: not found

我使用 rvm
which bundle
/home/deployer/.rvm/gems/ruby-2.1.1/bin/bundle
which rvm
/home/deployer/.rvm/bin/rvm

最佳答案

我最终做了一些类似于 Denis 的事情,除了每个 RVM 文档使用了 Ruby 包装器。这真的很烦人,但根据 top -cshift-M它正在工作。写半详细,因为我希望这对其他人有所帮助。

我的设置是:Digital Ocean、Ubuntu 14.10、Rails 4.0.x、Ruby 2.0.x、RVM 1.26.10。由于我使用的是Passenger 5+Nginx,因此我的Procfile 仅用于后台作业。部署用户是“rails”。我有一个名为“ruby-2.0.0-p598@rockin”的 gemset 用于我的名为“rockin”的应用程序,因为我在盒子上运行了多个应用程序。

添加绝对值 PATH bundle 对我不起作用。

这是我所做的:

  • 按照 docs 创建 rvm 包装器. (用户是rails)
    rvm alias create rockin ruby-2.0.0-p598@rockin
    
  • 为 RAILS_ENV 和 PATH 为包创建 .env 文件
    RAILS_ENV=production 
    
  • 试图将工头导出到 Upstart
    rvmsudo foreman export upstart /etc/init -a rockin -u rails
    
  • 由于另一个窗口中的 bundle 问题,决定拖尾日志作为健全性检查。 (用户是root)
    tail -f /var/log/upstart/rockin-worker-1.log
    
  • 手动更改 upstart 文件。我需要编辑的文件是 rockin-worker-1.conf .由于大部分内容都已格式化并具有我需要的内容,因此我使用上面创建的包装器更改了 exec 行以真正指向 bundle。
    start on starting rockin-worker
    stop on stopping rockin-worker
    respawn
    
    env PORT=5000
    env RAILS_ENV='production'
    
    setuid rails
    
    chdir /home/rails/rockin
    
    exec /usr/local/rvm/wrappers/rockin/bundle exec rake environment resque:work QUEUE=*
    
  • 运行!
    sudo start rockin-worker 
    
  • 您可以查看尾部日志,但如果您没有看到任何输出,那么您就可以开始了!然后通过做 top -c 来仔细检查顶部和 shift-M .我的 resque worker 启动并进入等待模式。完美的。

  • 这应该适用于使用 rvm 和其他后台工作人员(如 sidekiq)的任何人。

    对于任何说 PATH 可行的人,我都尝试了 which bundlewhereis bundle从我的应用程序的根目录,并将这些路径用于 .env 文件。两者都不起作用,并且都导致日志提示 /bin/sh: 1: exec: bundle: not found .

    关于ruby-on-rails - Foreman rvm upstart 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23307503/

    相关文章:

    java - 如何在jruby中将Java Map转换为json

    console - 从 Symfony2 开始并创建 bundle

    java - 通过 Intent 将整数传递给 Activity - Java (Android)

    android - 如何将一组对象从一个 Activity 发送到另一个?

    javascript - MessengerExtensions.requestCloseBrowser 似乎不起作用

    android - 在 Android 中将 Google 登录与 WebView 集成

    ruby-on-rails - Rails 4 调整大小和裁剪类似于 Facebook 的图像

    每次注销后 RVM 设置都会丢失

    centos - 如何在 CentOS 5.6 上安装 iconv-devel?

    javascript - Ruby on Rails 与 Parse + Backbone.js