具有多个 Puma 应用程序的 Capistrano

Capistrano with multiple Puma applications

我想通过 capistrano 将多个 rails 应用程序部署到一个虚拟机。

deploy.rb 中的两个应用程序都有这种设置:

set :puma_bind, "unix://#{shared_path}/tmp/sockets/#{fetch(:application)}-puma.sock"

他们有自己的 Nginx 配置文件。

第一个应用程序:

upstream puma {
   server unix:///var/www/first-app/shared/tmp/sockets/first-app-puma.sock;
}

server {
   listen 80 default_server deferred;

第二个应用程序:

upstream puma_second {
  server unix:///var/www/second-app/shared/tmp/sockets/second-app-puma.sock;
}

server {
  listen 81;

第一个在 80 端口,第二个在 81 端口。

然而,当我部署第二个应用程序然后重新启动 Nginx,然后我打开 example.com:81它显示第一个应用程序的页面没有任何样式。

为什么会这样?我需要将第二个应用程序绑定到其他地方吗?

您是否尝试过将两者都保留在端口 80 上并在应用程序的每个服务器块上添加不同的 server_names?

server { 
  listen 80 default_server deferred;
  server_name railsapp1.com;

  . 
  . 
  .
}

server { 
  listen 80 default_server deferred;
  server_name railsapp2.com;
  .
  .
}

我可以通过更改两个应用程序的 nginx.conf 文件来解决这个问题。

第一个应用程序:

upstream puma_first_app {
   server unix:///var/www/first_app/shared/tmp/sockets/first_app-puma.sock;
}

server {
  listen 9999;

我在 location @puma 中添加了这个:

proxy_pass http://puma_first_app;

在第二个应用程序中,我使用端口 80 并将 first_app 字符串更改为 second app