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

Ram*_*ues 2 ruby ruby-on-rails puma

我正在尝试启动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
Run Code Online (Sandbox Code Playgroud)

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

kan*_*kyu 9

puma.rb当我第一次将file by添加rails app:update到 Heroku 应用程序的 Rails 5.2时,发生了此错误。

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

通过添加tmp/pids/.keep文件解决,

$ touch tmp/pids/.keep
Run Code Online (Sandbox Code Playgroud)

并更新.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
Run Code Online (Sandbox Code Playgroud)


Ram*_*ues 8

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

mkdir tmp
mkdir tmp/pids
Run Code Online (Sandbox Code Playgroud)

  • 顺便说一句,如果您的应用程序需要推送到服务器(例如 Heroku),并且您之前的 .gitignore 中有 /tmp/* ,则需要将 .keep 文件添加到 pids 文件夹中,重新添加使用 `git add -f` 将 pids 文件夹(和 .keep 文件)添加到 git 存储库,并向 .gitignore 添加排除项以不排除 pids 文件夹和 .keep 文件。 (4认同)
  • `mkdir -p tmp/pids` 递归创建 (4认同)
  • 当您使用“bundle execrails server (puma)”启动服务器时,Rails 在初始化期间会自动创建该文件夹。如果您使用“bundle exec puma”启动服务器,则会跳过此文件夹创建,从而导致错误。如果两个命令具有相同的结果,那就太好了,这样可以避免一些错误。 (3认同)
  • 需要手动解决,而 Rails 使用 `tmp/pids/server.pid` 作为 puma pidfile 的默认位置,这不是很奇怪吗? (2认同)
  • 当您更新“.gitignore”以允许新路径进入您的 docker 镜像时,请不要忘记更新您的“.dockerignore”文件。 (2认同)