【发布时间】:2016-11-13 03:18:37
【问题描述】:
我已经为此苦苦挣扎了一个星期,似乎真的找不到答案。我已经使用 Capistrano 部署了我的 Rails 应用程序。我使用 Puma 作为服务器。
当我部署时,一切正常。问题是让 Puma 在重新启动和/或崩溃时启动。
为了获得部署设置,我使用了这个tutorial。我也在使用 RVM。我似乎遇到的问题是让服务启动 Puma。这是我用过的(服务文件):
[Unit]
Description=Puma HTTP Server
After=network.target
[Service]
Type=simple
#User=my-user
WorkingDirectory=/home/my-user/apps/MyApp/current
ExecStart=/home/my-user/apps/MyApp/current/sbin/puma -C /home/my-user/apps/MyApp/shared/puma.rb
Restart=always
[Install]
WantedBy=multi-user.target
这行不通。我开始认为问题是没有为所有用户安装 Ruby,所以我为所有用户安装了 RVM,但仍然遇到同样的问题。我的服务器只有 root 和我的用户。
看看 Capistrano 是如何部署的,它运行的命令是:cd /home/my-user/apps/MyApp/current && ( RACK_ENV=production /home/my-user/.rvm/bin/rvm default do bundle exec puma -C /home/my-user/apps/MyApp/shared/puma.rb --daemon )。如果我使用上述命令,我会收到来自 Systmd 的错误,抱怨缺少参数。所以我用它写了一个脚本,并让服务文件调用这个脚本来启动应用程序。
这也不起作用。请注意,如果我从服务器上的任何位置调用脚本,脚本确实会启动应用程序,因此这是配置 Systemd 的问题,但我不知道出了什么问题,我不知道如何调试它。我在 System 的网站上看到了调试页面,但它对我没有帮助。如果我运行systemctl status puma.service,它告诉我的只是服务处于失败状态,但它没有告诉我如何或为什么。
另外值得注意的是:如果我从我的 App 文件夹运行 bundle exec puma -C /home/my-user/apps/MyApp/shared/puma.rb,它可以正常工作,那么我如何使用 Systemd 服务复制这个命令?
【问题讨论】:
标签: ruby-on-rails linux nginx puma systemd