【问题标题】:No such file or directory @ rb_sysopen - tmp/pids/puma.pid没有这样的文件或目录@rb_sysopen - tmp/pids/puma.pid
【发布时间】:2019-03-22 14:01:46
【问题描述】:

我正在尝试启动 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


    【解决方案1】:

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

    mkdir -p tmp/pids
    

    【讨论】:

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

    您可以将其添加到您的config/puma.rb

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

    【讨论】:

      【解决方案3】:

      当我第一次将 rails app:updatepuma.rb 文件添加到 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
      

      【讨论】:

        猜你喜欢
        • 2014-07-09
        • 2014-05-14
        • 1970-01-01
        • 2015-05-14
        • 1970-01-01
        • 2015-05-11
        • 1970-01-01
        • 2018-05-01
        • 1970-01-01
        相关资源
        最近更新 更多