gpt4 book ai didi

ruby-on-rails - 如何让 systemd 使用 Puma 重启 Rails App

转载 作者:IT王子 更新时间:2023-10-29 00:08:53 25 4
gpt4 key购买 nike

我已经为此苦苦挣扎了一个星期,但似乎真的找不到答案。我已经使用 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执行 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 服务复制此命令?

最佳答案

最后,问题是双重的:1) rvm 没有为所有用户正确安装,这意味着部署用户没有可用的 ruby​​/bundle/etc,其次脚本也是错误的。以下是对我有用的修改后的脚本供引用:

[Unit]
Description=Puma HTTP Server
After=network.target

[Service]
Type=simple

User=deployer

WorkingDirectory=/var/www/apps/MRCbe/current

ExecStart=/bin/bash -lc 'bundle exec puma -C /var/www/apps/MRCbe/shared/puma.rb'

Restart=always

[Install]
WantedBy=multi-user.target

关于ruby-on-rails - 如何让 systemd 使用 Puma 重启 Rails App,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38302492/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com