【问题标题】:Error while deploying Rails 6 app to Google Cloud Platform App Engine将 Rails 6 应用程序部署到 Google Cloud Platform App Engine 时出错
【发布时间】:2019-10-08 16:32:17
【问题描述】:

我已经使用 Ruby on Rails(ROR - v6.0.0;Ruby - v2.6.3)开发了应用程序的第一次迭代。我需要将它部署到 gcp,谷歌云平台,因为这是我工作的公司使用的。我遵循了谷歌为此提供的教程,如here 所示。但是,无论我做什么,在推送即将结束时我都会收到此错误:

8536b8dd72f7: Pushed
f66b9865f45c: Layer already exists
8f213bf0e9c7: Pushed
ce02b74896ad: Pushed
a79efcc05468: Pushed
latest: digest: sha256:93b405b42825c93798db12c14f4f5d5dd09c6fc3e32861a1a1f3947c338e45a2 size: 2419
DONE
-----------------------------------------------------------------------------------------------------------------------------------------------------------

Updating service [default] (this may take several minutes)...failed.
ERROR: (gcloud.app.deploy) Error Response: [9]
Application startup error:
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:8080
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)>'

奇怪的是,我尝试按照谷歌的教程使用全新的 rails 应用程序(同一台机器,相同的环境),我得到了同样的错误。该帐户已启用计费,所以我认为不是这样。当我在本地运行该应用程序时,它工作得很好。无论如何,这是我的“app.yml”文件:

entrypoint: bundle exec rackup --port $PORT
env: flex
runtime: ruby

env_variables:
    SECRET_KEY_BASE: [MY_SECRET_KEY_IS_HERE]

当我在本地计算机上运行 bundle exec rackup --port 8080 时,应用程序启动得很好。我已经搜索了所有内容,但无法找到解决方案。我看过类似的帖子,但要么没有回答,要么没有解决这个问题。我正在考虑将应用程序“dockerizing”,但不确定是否可以解决任何问题;但如果我理解正确,docker 是一种告诉其他机器如何运行特定指令集的方法,比如应用程序,以便它可以在几乎任何机器上运行。 Idk,这就是我能想到的。欢迎任何和所有建议,我们将不胜感激。

感谢您抽出宝贵时间阅读本文,否则我希望您度过愉快的一天。

【问题讨论】:

    标签: ruby-on-rails ruby docker google-app-engine gcloud


    【解决方案1】:

    我遇到了同样的问题。

    我使用puma gem 作为我的应用服务器。我需要更改app.yaml 文件中的entrypoint

    entrypoint: bundle exec rails server Puma -p $PORT

    文档可以在这里找到: https://cloud.google.com/appengine/docs/flexible/ruby/runtime

    【讨论】:

    • 我按照上面提到的教程进行操作,得到了类似的结果,@andyavd01 的解决方案对我有用。
    • 感谢您的报告和潜在的解决方案。如有必要,我们会查看并更新教程。
    • 可能是因为你的教程是在 Rails 5 上的?
    • 我仍然有同样的问题,我已经在使用那个确切的入口点
    【解决方案2】:

    我遇到了同样的问题。我的/config/puma.rb 有这个:

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

    这让我可以使用env_variables 将pid 文件的位置设置为/tmp。我在app.yaml中添加了以下内容:

    env_variables:
      PIDFILE: "/tmp/puma.pid"
    

    一旦我这样做了,错误就消失了。

    我相信这是由于默认位置是只读的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-27
      • 2017-11-27
      • 2020-02-12
      • 2020-09-01
      • 2020-11-24
      • 2015-05-06
      • 2019-04-24
      • 2019-07-12
      相关资源
      最近更新 更多