没有这样的文件或目录@ rb_sysopen - tmp/pids/puma.pid

问题描述 投票:0回答:4

我正在尝试启动 puma,但在最后一步失败了,如下所示:

16:38:09 web.1  | /home/ramonpm/.rvm/gems/ruby-2.2.7/gems/puma-3.9.1/lib/puma/launcher.rb:130:in `initialize': No such file or directory @ rb_sysopen - tmp/pids/puma.pid (Errno::ENOENT)
16:38:09 web.1  |   from /home/ramonpm/.rvm/gems/ruby-2.2.7/gems/puma-3.9.1/lib/puma/launcher.rb:130:in `open'
16:38:09 web.1  |   from /home/ramonpm/.rvm/gems/ruby-2.2.7/gems/puma-3.9.1/lib/puma/launcher.rb:130:in `write_pid'
16:38:09 web.1  |   from /home/ramonpm/.rvm/gems/ruby-2.2.7/gems/puma-3.9.1/lib/puma/launcher.rb:103:in `write_state'
16:38:09 web.1  |   from /home/ramonpm/.rvm/gems/ruby-2.2.7/gems/puma-3.9.1/lib/puma/single.rb:92:in `run'
16:38:09 web.1  |   from /home/ramonpm/.rvm/gems/ruby-2.2.7/gems/puma-3.9.1/lib/puma/launcher.rb:174:in `run'
16:38:09 web.1  |   from /home/ramonpm/.rvm/gems/ruby-2.2.7/gems/puma-3.9.1/lib/puma/cli.rb:77:in `run'
16:38:09 web.1  |   from /home/ramonpm/.rvm/gems/ruby-2.2.7/gems/puma-3.9.1/bin/puma:10:in `<top (required)>'
16:38:09 web.1  |   from /home/ramonpm/.rvm/gems/ruby-2.2.7/bin/puma:23:in `load'
16:38:09 web.1  |   from /home/ramonpm/.rvm/gems/ruby-2.2.7/bin/puma:23:in `<main>'
16:38:09 web.1  |   from /home/ramonpm/.rvm/gems/ruby-2.2.7/bin/ruby_executable_hooks:15:in `eval'
16:38:09 web.1  |   from /home/ramonpm/.rvm/gems/ruby-2.2.7/bin/ruby_executable_hooks:15:in `<main>'
16:38:09 web.1  | exited with code 1
16:38:09 system | sending SIGTERM to all processes

在其他地方找不到解决方案,它们都与不同的事物相关。

ruby-on-rails ruby puma
4个回答
51
投票

可以手动创建必要的文件夹来解决这个问题,然后服务器进程可以创建pid文件。

mkdir -p tmp/pids

9
投票

当我第一次将

puma.rb
rails app:update
文件添加到 Heroku 应用程序的 Rails 5.2 时,发生了此错误。

# Specifies the `pidfile` that Puma will use.
pidfile ENV.fetch("PIDFILE") { "tmp/pids/server.pid" }

通过添加

tmp/pids/.keep
文件解决,

$ touch tmp/pids/.keep

并更新

.gitignore
文件如下。

# Ignore all logfiles and tempfiles.
/log/*
/tmp/*
!/log/.keep
!/tmp/.keep

# Ignore pidfiles, but keep the directory.
/tmp/pids/*
!/tmp/pids/
!/tmp/pids/.keep

3
投票

您可以将其添加到您的

config/puma.rb
中:

require "fileutils"
FileUtils.mkdir_p("tmp/pids")

0
投票

更好的答案是不要直接致电

puma
,而是致电
rails server

例如而不是:

bundle exec puma -p $PORT -C ./config/puma.rb

做:

unset PORT && bundle exec rails server

例如在 Procfile/Procfile.dev 中

web: unset PORT && bundle exec rails server
css: yarn build:css --watch
worker: bundle exec rails jobs:work
© www.soinside.com 2019 - 2024. All rights reserved.