我使用以下独angular兽configuration成功部署了一个使用Capistrano,Unicorn,Nginx的Rails应用程序:
env = ENV [“RAILS_ENV”] || “发展”
worker_processes 4
听“/tmp/app_one.socket”,:backlog => 64
preload_app true
超时60
pid“/tmp/unicorn.app_one.pid”
如果env ==“生产”
working_directory“/ home / single_user / app_one / current”
用户'single_user'
shared_path =“/ home / single_user / app_one / shared”
stderr_path“#{shared_path} /log/unicorn.stderr.log”
stdout_path“#{shared_path} /log/unicorn.stdout.log”
结束
before_fork do | server,worker |
如果定义?(ActiveRecord :: Base)
ActiveRecord的:: Base.connection.disconnect!
结束
old_pid =“/tmp/unicorn.app_one.pid.oldbin”
如果File.exists?(old_pid)&& server.pid!= old_pid
开始
Process.kill(“QUIT”,File.read(old_pid).to_i)
救援Errno :: ENOENT,Errno :: ESRCH
# 已经死了
结束
结束
结束
after_fork do | server,worker |
如果定义?(ActiveRecord :: Base)
的ActiveRecord :: Base.establish_connection
结束
结束
在同一个single_user ,我添加了第二个Rails应用程序,第二个Nginx虚拟服务器,并使用完全相同的Unicornconfiguration,在所有适当的位置用app_tworeplaceapp_one 。
我的第二个应用程序部署得很好,但现在我无法部署应用程序。 /tmp/unicorn.app_one.pid不存在,但该网站仍然正常工作( top显示10个进程按预期)。 但是/tmp/app_one.socket确实存在,这使我无法手动启动Unicorn。
那么这是适当的做法,在同一个用户下运行多个Rails / Unicorn / Nginx吗? 我在部署过程中是否引起了某种冲突? 我应该如何继续进行,而不会中断正在使用中的app_one ?
为什么不使用特定于应用程序的tmp目录,并将unicorn.pid放到那里,如“#{working_directory} /tmp/unicorn.pid”。 同样,对于任何特定于应用程序的文件,如套接字 如果您不想将其放在working_directory中,请使用shared_path。 将app1中的所有内容都保存在app1特定的位置,以及与app2特定的目录中的app2相关的所有内容。