Rails 的 Puma Systemd 配置不起作用 [英] Puma Systemd Configuration for Rails Not Working

查看:31
本文介绍了Rails 的 Puma Systemd 配置不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have completed an application which was built using Ruby on Rails. Right now I want to host it on an EC2 instance on AWS.

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

I have provisioned a server for it, and I am using puma HTTP server as the application server. Starting the application in production always requires me to run the RAILS_ENV=production rails s which isn't often convenient as it does not return to prompt when the application is started.

我也希望能够用systemd管理Puma,这样我就可以轻松startstopcheck status重新启动 puma 服务器,运行一行命令.

I also want to be able to manage Puma with systemd, so that I can easily start, stop, check status and restart the puma server by running a one-line command.

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

I have tried a lot of solutions online, but when I try to start the server I often get an error:

● 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

我需要这方面的帮助.提前致谢.

I need some help about this. Thank you in advance.

推荐答案

这是我修复它的方法:

  1. 安装 Puma(如果尚未安装).

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

Run the command which puma to print the installation directory of the puma server on your machine, which is usually installed in /home/your-username/.rbenv/shims/puma directory.

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

Open the puma.service file located at /etc/systemd/system/puma.service by the running the command below:

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

将下面的 Puma 服务配置文件复制到其中并保存.

Copy the Puma service configuration file below into it and save.

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,它们开箱即用.
  • For ExecStart: ExecStart=/your-puma-directory-path -C /your-app-puma-config-file-path
  • For ExecStop: ExecStop=/your-puma-directory-path -S /your-app-puma-config-file-path
  • There is no need to define ExecReload or ExecRestart, they work out of the box.

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

You can now start the puma server using the command:

sudo systemctl start puma

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

OR restart the puma server using the command:

sudo systemctl restart puma

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

OR check the status puma server using the command:

sudo systemctl status puma

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

OR stop the puma server using the command:

sudo systemctl stop puma

仅此而已.

我希望这会有所帮助

这篇关于Rails 的 Puma Systemd 配置不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆