无法 运行 Puma 作为守护进程 OptionParser::AmbiguousOption:不明确的选项:-d
Unable to run Puma as daemon OptionParser::AmbiguousOption: ambiguous option: -d
我升级到 Puma 5.0.2 并像往常一样启动我的 rails 应用:
bundle exec puma -d -e production -b unix:///home/user/app/tmp/puma.sock
现在我得到错误:
OptionParser::AmbiguousOption: ambiguous option: -d
将 运行 puma 作为守护进程的正确方法是什么?
上下文:快速 links:
从 Puma 5.0.0 开始,Daemonize 选项已被删除,没有替换(来源:https://github.com/puma/puma/blob/master/History.md)
您可以在他们的文档中参考此部分的守护进程:https://github.com/puma/puma/blob/master/docs/deployment.md#should-i-daemonize
解法:
根据您的 OS 发行版为 puma 创建一个 systemd 服务。
在您的应用程序目录中的 config/puma 中配置您的环境。
在 /etc/systemd/system
中添加名为 puma.service 的服务文件(该路径适用于 SLES15)。
这是一个适合我的示例(根据您的需要替换 <> 中的文本):
[Unit]
Description=Puma HTTP Server
After=network.target
StartLimitIntervalSec=0
[Service]
Type=simple
User=<UserForPuma>
WorkingDirectory=<YourAppDir>
Environment=RAILS_MASTER_KEY=<EncryptionKeyIfUsedByRailsApp>
ExecStart=/usr/bin/rails s puma -b 'ssl://127.0.0.1:3000?key=<path_to_privatekey.key>&cert=<path_to_certificate.crt>' -e production
Restart=always
RestartSec=2
KillMode=process
[Install]
WantedBy=multi-user.target
将以上内容另存为文件名puma.service在上述目录路径下。
在此之后只需启用并启动服务:
# systemctl daemon-reload
# systemctl --now enable puma.service
Created symlink /etc/systemd/system/multi-user.target.wants/puma.service → /etc/systemd/system/puma.service.
# systemctl status puma
● puma.service - Puma HTTP Server
Loaded: loaded (/etc/systemd/system/puma.service; enabled; vendor preset: disabled)
Active: active (running) since Fri 2020-10-09 12:59:28 CEST; 7s ago
Main PID: 2854 (ruby.ruby2.5)
Tasks: 21
CGroup: /system.slice/puma.service
├─2854 puma 5.0.2 (ssl://127.0.0.1:3000?key=<your_key_path.key>&cert=<your_cert_path.crt>) [rails-app-dir]
├─2865 puma: cluster worker 0: 2854 [rails-app-dir]
└─2871 puma: cluster worker 1: 2854 [rails-app-dir]
查看 puma 状态:
ps -ef | grep puma
现在应该显示 运行 个 puma 进程(主进程和辅助进程)。
这里是 link 初学者如何创建 systemd 服务:
https://medium.com/@benmorel/creating-a-linux-service-with-systemd-611b5c8b91d6
Systemd 文档:
- https://www.freedesktop.org/software/systemd/man/systemd.unit.html
- https://www.freedesktop.org/software/systemd/man/systemd.service.html
抱歉,我不是 Windows 人,但我相信想法是一样的。在 Windows 工作的任何人都可以尝试创建一个 bat 文件并 运行 它在后台作为 Windows 服务。
希望对您有所帮助。
Github 上的 gem 看起来是一个很好的起点:
https://github.com/kigster/puma-daemon
我升级到 Puma 5.0.2 并像往常一样启动我的 rails 应用:
bundle exec puma -d -e production -b unix:///home/user/app/tmp/puma.sock
现在我得到错误:
OptionParser::AmbiguousOption: ambiguous option: -d
将 运行 puma 作为守护进程的正确方法是什么?
上下文:快速 links:
从 Puma 5.0.0 开始,Daemonize 选项已被删除,没有替换(来源:https://github.com/puma/puma/blob/master/History.md)
您可以在他们的文档中参考此部分的守护进程:https://github.com/puma/puma/blob/master/docs/deployment.md#should-i-daemonize
解法: 根据您的 OS 发行版为 puma 创建一个 systemd 服务。
在您的应用程序目录中的 config/puma 中配置您的环境。
在 /etc/systemd/system
中添加名为 puma.service 的服务文件(该路径适用于 SLES15)。
这是一个适合我的示例(根据您的需要替换 <> 中的文本):
[Unit]
Description=Puma HTTP Server
After=network.target
StartLimitIntervalSec=0
[Service]
Type=simple
User=<UserForPuma>
WorkingDirectory=<YourAppDir>
Environment=RAILS_MASTER_KEY=<EncryptionKeyIfUsedByRailsApp>
ExecStart=/usr/bin/rails s puma -b 'ssl://127.0.0.1:3000?key=<path_to_privatekey.key>&cert=<path_to_certificate.crt>' -e production
Restart=always
RestartSec=2
KillMode=process
[Install]
WantedBy=multi-user.target
将以上内容另存为文件名puma.service在上述目录路径下。 在此之后只需启用并启动服务:
# systemctl daemon-reload
# systemctl --now enable puma.service
Created symlink /etc/systemd/system/multi-user.target.wants/puma.service → /etc/systemd/system/puma.service.
# systemctl status puma
● puma.service - Puma HTTP Server
Loaded: loaded (/etc/systemd/system/puma.service; enabled; vendor preset: disabled)
Active: active (running) since Fri 2020-10-09 12:59:28 CEST; 7s ago
Main PID: 2854 (ruby.ruby2.5)
Tasks: 21
CGroup: /system.slice/puma.service
├─2854 puma 5.0.2 (ssl://127.0.0.1:3000?key=<your_key_path.key>&cert=<your_cert_path.crt>) [rails-app-dir]
├─2865 puma: cluster worker 0: 2854 [rails-app-dir]
└─2871 puma: cluster worker 1: 2854 [rails-app-dir]
查看 puma 状态:
ps -ef | grep puma
现在应该显示 运行 个 puma 进程(主进程和辅助进程)。
这里是 link 初学者如何创建 systemd 服务: https://medium.com/@benmorel/creating-a-linux-service-with-systemd-611b5c8b91d6
Systemd 文档:
- https://www.freedesktop.org/software/systemd/man/systemd.unit.html
- https://www.freedesktop.org/software/systemd/man/systemd.service.html
抱歉,我不是 Windows 人,但我相信想法是一样的。在 Windows 工作的任何人都可以尝试创建一个 bat 文件并 运行 它在后台作为 Windows 服务。 希望对您有所帮助。
Github 上的 gem 看起来是一个很好的起点:
https://github.com/kigster/puma-daemon