在Dokku上部署Rails时出错-在Digital Ocean上

时间:2019-09-03 02:08:10

标签: ruby-on-rails dokku

我正在尝试使用示例Rails应用程序在DigitalOcean上运行dokku,但是当我进行部署时,出现此错误:

print(" ".join(words[2:-4:2]), words[-4])

我在其他支持站点中查找了类似的错误-但看起来Web应用程序容器启动后立即停止。

我可以看到我的数据库容器正在运行,并且看到一个带有 Puma starting in single mode... * Version 3.12.1 (ruby 2.6.3-p62), codename: Llamas in Pajamas * Min threads: 5, max threads: 5 * Environment: production * Listening on tcp://0.0.0.0:5000 bundler: failed to load command: rackup (/app/vendor/bundle/ruby/2.6.0/bin/rackup) Errno::ENOENT: No such file or directory @ rb_sysopen - tmp/pids/server.pid /app/vendor/bundle/ruby/2.6.0/gems/puma-3.12.1/lib/puma/launcher.rb:133:in `initialize' /app/vendor/bundle/ruby/2.6.0/gems/puma-3.12.1/lib/puma/launcher.rb:133:in `open' /app/vendor/bundle/ruby/2.6.0/gems/puma-3.12.1/lib/puma/launcher.rb:133:in `write_pid' /app/vendor/bundle/ruby/2.6.0/gems/puma-3.12.1/lib/puma/launcher.rb:106:in `write_state' /app/vendor/bundle/ruby/2.6.0/gems/puma-3.12.1/lib/puma/single.rb:103:in `run' /app/vendor/bundle/ruby/2.6.0/gems/puma-3.12.1/lib/puma/launcher.rb:186:in `run' /app/vendor/bundle/ruby/2.6.0/gems/puma-3.12.1/lib/rack/handler/puma.rb:73:in `run' /app/vendor/bundle/ruby/2.6.0/gems/rack-2.0.7/lib/rack/server.rb:297:in `start' /app/vendor/bundle/ruby/2.6.0/gems/rack-2.0.7/lib/rack/server.rb:148:in `start' /app/vendor/bundle/ruby/2.6.0/gems/rack-2.0.7/bin/rackup:4:in `<top (required)>' /app/vendor/bundle/ruby/2.6.0/bin/rackup:23:in `load' /app/vendor/bundle/ruby/2.6.0/bin/rackup:23:in `<top (required)>' 的容器-而且它永远不会超过几秒钟。

有人知道为什么吗?

3 个答案:

答案 0 :(得分:1)

Rails 6在config/puma.rb上添加了一行,指定了pidfile的位置(在撰写本文时,默认情况下为第20行),其默认值如下:

pidfile ENV.fetch("PIDFILE") { "tmp/pids/server.pid" }

我遇到了您提到的相同问题,并将该行更改为

pidfile ENV.fetch("PIDFILE") { "server.pid" }

tmp.gitignore两者中删除.dockerignore目录(在我的情况下,因为我的应用是Dockerized)也可以,但是在git和更高版本中有tmp个目录我的生产容器闻起来很可笑,所以我选择了上述方法。

无论哪种方式,我都很高兴您能成功!希望对您有帮助

PS-您可能要考虑选择以下答案之一为正确的代码(即使这是您提供的答案),祝您编程愉快!

答案 1 :(得分:0)

tmp/pids/server.pid是Rails用来检查文件是否已经在运行,以及用来运行哪个进程ID的文件。

使用Dokku的IIRC,有一个名为dokku的用户,所有Dokku进程都在该用户下运行-确保该用户(或在其下运行的任何用户Dokku / Rails应用程序)具有对该目录的读/写权限

或者,您可以只调用touch tmp/pids/server.pid来创建文件,以便Rails可以使用它。

答案 2 :(得分:0)

不确定为什么会出现此问题-但我的.gitignore文件(默认情况下,我保留了)保留了/ tmp文件夹,但忽略了内容,因此回购中没有/ tmp / pids,并且可能不在Web容器上。

我将/ tmp / pids文件夹强行放入存储库中...现在可以正常工作了!