关于ubuntu:Vagrant Ubuntu / trusty32上的mina部署失败

关于ubuntu:Vagrant Ubuntu / trusty32上的mina部署失败

我是 Rails 的新手。花了一整个上午的时间尝试调试这个奇怪的问题。我正尝试使用 mina 将我的 rails 应用程序部署到暂存服务器。我的服务器是运行 Vagrant VM 的 Ubuntu/trusty32 14.04。我尝试部署到的服务器是 CentOS 版本 6.6。以下是来自 config/deploy.rb 的部署任务:

task :deploy => :environment do
  deploy do
    invoke :'git:clone'
    invoke :'deploy:link_shared_paths'
    invoke :'bundle:install'
    invoke :'rails:db_migrate'
    invoke :'rails:assets_precompile'
    to :launch do
      queue  "cd #{deploy_to}/#{current_path} && RAILS_ENV=#{rails_env} bundle exec puma -t #{puma_threads} -e #{rails_env} -d -b unix://#{deploy_to}/shared#{socket_file} --pidfile #{deploy_to}/shared#{pid_file}"
      queue "sudo echo -1000 > /proc/`cat #{deploy_to}/shared#{pid_file}`/oom_score_adj"                  
    end
  end
end

这是我收到的错误。

Puma 以单一模式启动

  • 版本 2.11.0(ruby 2.0.0-p598),代号:Intrepid Squirrel
  • 最小线程数:0,最大线程数:5
  • 环境:暂存
  • 守护进程正在运行...

cat:/var/www/staging/shared/tmp/pids/puma.pid:没有此文件或目录

cat:/var/www/staging/shared/tmp/pids/puma.pid:没有此文件或目录

bash:第 176 行:/proc//oom_score_adj:没有此文件或目录

!错误:部署失败。

奇怪的是,如果我删除该行,queue "sudo echo -1000 > /proc/`cat #{deploy_to}/shared#{pid_file}`/oom_score_adj"则会同时创建 pid 和套接字文件。我认为这一行是在 puma 完成守护进程并创建 pid 文件之前执行的。但是,同样的脚本在另一台服务器上也能正常工作。

答案1

在两行之间随机放置一个 sleep 似乎可以达到这样的效果:

queue! "cd #{deploy_to}/#{current_path} && RAILS_ENV=#{rails_env} bundle exec puma -t #{puma_threads} -e #{rails_env} -d -b unix://#{deploy_to}/shared#{socket_file} --pidfile #{deploy_to}/shared#{pid_file}"
queue! "sleep 10"
queue! "sudo echo -1000 > /proc/`cat #{deploy_to}/shared#{pid_file}`/oom_score_adj"

但愿意接受更好的解决方案:)

相关内容