【问题标题】:Puma Systemd Configuration for Rails Not WorkingRails 的 Puma Systemd 配置不工作
【发布时间】:2020-04-09 07:12:30
【问题描述】:

我已经完成了一个使用 Ruby on Rails 构建的应用程序。现在我想将它托管在 AWS 上的 EC2 实例上。

我已经为它配置了一个服务器,并且我使用puma HTTP 服务器作为应用程序服务器。在生产中启动应用程序总是需要我运行RAILS_ENV=production rails s,这通常不方便,因为它不会在应用程序启动时返回提示。

我还希望能够使用 systemd 管理 Puma,这样我就可以通过运行一行命令轻松地 startstopcheck statusrestart puma 服务器。

我在网上尝试了很多解决方案,但是当我尝试启动服务器时经常会报错:

● puma.service - Puma HTTP Forking Server
   Loaded: error (Reason: Exec format error)
   Active: activating (start) since Mon 2019-12-16 15:33:06 UTC; 59s ago
Cntrl PID: 4473 (bundle)
    Tasks: 30 (limit: 4703)
   CGroup: /system.slice/puma.service
           ├─4473 puma 3.12.1 (tcp://0.0.0.0:3000) [my-app]
           ├─4522 puma: cluster worker 0: 4473 [my-app]
           └─4527 puma: cluster worker 1: 4473 [my-app]

Dec 16 15:33:06 ip-172-31-19-238 rbenv[4473]: [4473] * Environment: production
Dec 16 15:33:06 ip-172-31-19-238 rbenv[4473]: [4473] * Process workers: 2
Dec 16 15:33:06 ip-172-31-19-238 rbenv[4473]: [4473] * Preloading application
Dec 16 15:33:08 ip-172-31-19-238 rbenv[4473]: [4473] * Listening on tcp://0.0.0.0:3000
Dec 16 15:33:08 ip-172-31-19-238 rbenv[4473]: [4473] ! WARNING: Detected 1 Thread(s) started in app boot:
Dec 16 15:33:08 ip-172-31-19-238 rbenv[4473]: [4473] ! #<Thread:0x000055f4b08bf7e0@/home/deploy/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/a
Dec 16 15:33:08 ip-172-31-19-238 rbenv[4473]: [4473] Use Ctrl-C to stop
Dec 16 15:33:08 ip-172-31-19-238 rbenv[4473]: [4473] - Worker 0 (pid: 4522) booted, phase: 0
Dec 16 15:33:08 ip-172-31-19-238 rbenv[4473]: [4473] - Worker 1 (pid: 4527) booted, phase: 0

我需要一些帮助。提前谢谢你。

【问题讨论】:

    标签: ruby-on-rails amazon-ec2 server puma


    【解决方案1】:

    这是我修复它的方法:

    1. 如果尚未安装Puma,请安装它。

    2. 运行which puma命令打印你机器上puma服务器的安装目录,一般安装在/home/your-username/.rbenv/shims/puma目录下。

    3. 通过运行以下命令打开位于/etc/systemd/system/puma.servicepuma.service 文件:

      sudo nano /etc/systemd/system/puma.service

    4. 将下面的Puma服务配置文件复制进去并保存。

    Puma 服务配置

    [Unit]
    Description=Puma HTTP Server
    After=network.target
    
    [Service]
    # Foreground process (do not use --daemon in ExecStart or config.rb)
    Type=simple
    
    # Preferably configure a non-privileged user
    User=deploy
    
    # The path to the your application code root directory
    WorkingDirectory=/home/deploy/my-app
    
    # The command to start Puma
    ExecStart=/home/deploy/.rbenv/shims/puma -C /home/deploy/my-app/config/puma.rb
    
    # The command to stop Puma
    ExecStop=/home/deploy/.rbenv/shims/puma -S /home/deploy/my-app/config.puma.rb
    
    # Path to PID file so that systemd knows which is the master process
    PIDFile=/home/deploy/my-app/tmp/pids/puma.pid
    
    # Should systemd restart puma?
    # Use "no" (the default) to ensure no interference when using
    # stop/start/restart via `pumactl`.  The "on-failure" setting might
    # work better for this purpose, but you must test it.
    # Use "always" if only `systemctl` is used for start/stop/restart, and
    # reconsider if you actually need the forking config.
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
    

    注意:

    • 对于ExecStart:ExecStart=/your-puma-directory-path -C /your-app-puma-config-file-path
    • 对于ExecStop:ExecStop=/your-puma-directory-path -S /your-app-puma-config-file-path
    • 无需定义ExecReloadExecRestart,它们开箱即用。

    您现在可以使用以下命令启动 puma 服务器:

    sudo systemctl start puma
    

    或者使用以下命令重启 puma 服务器:

    sudo systemctl restart puma
    

    或使用命令检查状态 puma 服务器:

    sudo systemctl status puma
    

    或使用以下命令停止 puma 服务器:

    sudo systemctl stop puma
    

    就是这样。

    我希望这会有所帮助

    【讨论】:

    • 对于 rails 6,我必须添加 env vars 才能正常工作。特别是对于凭证密钥:Environment=RAILS_ENV=... Environment=RAILS_MASTER_KEY=...
    • 刚刚偶然发现它,我知道它很旧,但我不得不反对 Puma 以 root 权限运行,这肯定是一个安全问题吗?该 systemd 文件应设置在应用程序用户主目录中的 .config/user 位置,并且无需 sudo 权限即可运行。
    猜你喜欢
    • 2018-03-26
    • 2016-06-20
    • 1970-01-01
    • 2016-10-10
    • 2021-04-07
    • 2016-04-13
    • 1970-01-01
    • 2014-10-03
    • 2019-07-26
    相关资源
    最近更新 更多