多个 Unicorns/Rails 应用,Nginx,一个用户

多个 Unicorns/Rails 应用,Nginx,一个用户
  1. 我使用以下 Unicorn 配置成功部署了使用 Capistrano、Unicorn 和 Nginx 的 Rails 应用程序:

    env = ENV["RAILS_ENV"] || "开发"
    
    worker_processes 4
    
    听“/tmp/app_one.socket”,:backlog => 64
    
    preload_app 真实
    
    超时 60
    
    pid“/tmp/unicorn.app_one.pid”
    
    如果 env ==“生产”
      工作目录“/home/single_user/app_one/current”
    
      用户‘single_user’
    
      shared_pa​​th =“/home/single_user/app_one/shared”
    
      stderr_path“#{shared_pa​​th}/log/unicorn.stderr.log”
      stdout_path“#{shared_pa​​th}/log/unicorn.stdout.log”
    结尾
    
    before_fork 执行 |服务器,工作者|
      如果定义了?(ActiveRecord::Base)
        ActiveRecord::Base.connection.disconnect!
      结尾
    
      old_pid = “/tmp/unicorn.app_one.pid.oldbin” 复制代码
      如果 File.exists?(old_pid) && server.pid != old_pid
        开始
          Process.kill("退出", File.read(old_pid).to_i)
        救援 Errno::ENOENT、Errno::ESRCH
          # 已经死了
        结尾
      结尾
    结尾
    
    after_fork 执行 |服务器,工作者|
      如果定义了?(ActiveRecord::Base)
        ActiveRecord::Base.establish_connection
      结尾
    结尾
    
  2. 在同一个环境下single_user,我添加了第二个 Rails 应用、第二个 Nginx 虚拟服务器,并使用了完全相同的 Unicorn 配置,替换app_oneapp_two在所有适当的地方。

  3. 我的第二个应用程序部署得很好,但现在我在部署第一个应用程序时遇到了麻烦。 不/tmp/unicorn.app_one.pid存在,但网站仍然运行良好(top按预期显示十个进程)。 但是/tmp/app_one.socket存在,这使我无法手动启动 Unicorn。

那么,在同一个用户下运行多个 Rails/Unicorn/Nginx 是否是适当的做法?我在部署过程中是否引起了某种冲突?我应该如何在不破坏正在运行的程序的情况下继续进行app_one

答案1

为什么不使用特定于应用程序的 tmp 目录,并将 unicorn.pid 放入其中,例如“#{working_directory}/tmp/unicorn.pid”。对于任何特定于应用程序的文件(如套接字),方法都类似。如果您不想将其放在 working_directory 中,请使用 shared_pa​​th。将特定于 app1 的所有内容保存在特定于 app1 的位置,将与 app2 相关的所有内容保存在特定于 app2 的目录中。

相关内容