【问题标题】:How to get systemd to restart Rails App with Puma如何让 systemd 使用 Puma 重新启动 Rails 应用程序
【发布时间】: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


    【解决方案1】:

    最后,问题是双重的: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
    

    【讨论】:

    • 为我工作!我整个上午都在寻找!
    • 嗨,我在 ubuntu16.04 上遇到了同样的问题,这也对我有用。谢谢!
    • 为我工作,谢谢伙计!
    【解决方案2】:

    你看过Foreman 吗? 如果应用程序有多个进程,Foreman 可以轻松启动和停止应用程序。 顺便说一句,它还提供了一个export 函数,可以生成一些systemdupstart 脚本供您(重新)启动和停止您的应用程序。

    由于您已经在使用 capistrano,您可以使用 capistrano-foreman 将所有这些与 capistrano 很好地集成。

    我希望你能在这些资源中找到一些用处

    【讨论】:

    • 我会调查 Foreman 并返回(如果工作正常,可能会标记为答案)。感谢您的链接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多