我是 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"
但愿意接受更好的解决方案:)