【问题标题】:How do change from Google App Engine from Flexible Environment to Standard environment如何从 Google App Engine 从灵活环境更改为标准环境
【发布时间】:2020-09-22 03:21:12
【问题描述】:

我正在尝试从灵活环境迁移到标准环境。我犯了一个错误,在第一次部署时我的 app.yaml 中有 env: flex。当我使用env: standard 进行部署时,我得到了Deployed service [default] to [project] 的确认,尽管部署速度似乎太快了,令人难以置信。当我请求应用程序时,我收到 500 错误。我正在使用 ruby​​ on rails。

2020-09-22 03:11:12 default[20200921t205538]  Puma starting in single mode...
2020-09-22 03:11:12 default[20200921t205538]  * Version 4.3.3 (ruby 2.7.1-p83), codename: Mysterious Traveller
2020-09-22 03:11:12 default[20200921t205538]  * Min threads: 5, max threads: 5
2020-09-22 03:11:12 default[20200921t205538]  * Environment: production
2020-09-22 03:11:12 default[20200921t205538]  * Listening on tcp://0.0.0.0:8081
2020-09-22 03:11:12 default[20200921t205538]  bundler: failed to load command: rackup (/workspace/.bundle/gems/ruby/2.7.0/bin/rackup)
2020-09-22 03:11:12 default[20200921t205538]  Errno::ENOENT: No such file or directory @ rb_sysopen - tmp/pids/server.pid
2020-09-22 03:11:12 default[20200921t205538]    /layers/google.ruby.bundle/gems/.bundle/gems/ruby/2.7.0/gems/puma-4.3.3/lib/puma/launcher.rb:216:in `initialize'
2020-09-22 03:11:12 default[20200921t205538]    /layers/google.ruby.bundle/gems/.bundle/gems/ruby/2.7.0/gems/puma-4.3.3/lib/puma/launcher.rb:216:in `open'
2020-09-22 03:11:12 default[20200921t205538]    /layers/google.ruby.bundle/gems/.bundle/gems/ruby/2.7.0/gems/puma-4.3.3/lib/puma/launcher.rb:216:in `write_pid'
2020-09-22 03:11:12 default[20200921t205538]    /layers/google.ruby.bundle/gems/.bundle/gems/ruby/2.7.0/gems/puma-4.3.3/lib/puma/launcher.rb:105:in `write_state'
2020-09-22 03:11:12 default[20200921t205538]    /layers/google.ruby.bundle/gems/.bundle/gems/ruby/2.7.0/gems/puma-4.3.3/lib/puma/single.rb:103:in `run'
2020-09-22 03:11:12 default[20200921t205538]    /layers/google.ruby.bundle/gems/.bundle/gems/ruby/2.7.0/gems/puma-4.3.3/lib/puma/launcher.rb:172:in `run'
2020-09-22 03:11:12 default[20200921t205538]    /layers/google.ruby.bundle/gems/.bundle/gems/ruby/2.7.0/gems/puma-4.3.3/lib/rack/handler/puma.rb:73:in `run'
2020-09-22 03:11:12 default[20200921t205538]    /layers/google.ruby.bundle/gems/.bundle/gems/ruby/2.7.0/gems/rack-2.2.2/lib/rack/server.rb:327:in `start'
2020-09-22 03:11:12 default[20200921t205538]    /layers/google.ruby.bundle/gems/.bundle/gems/ruby/2.7.0/gems/rack-2.2.2/lib/rack/server.rb:168:in `start'
2020-09-22 03:11:12 default[20200921t205538]    /layers/google.ruby.bundle/gems/.bundle/gems/ruby/2.7.0/gems/rack-2.2.2/bin/rackup:5:in `<top (required)>'
2020-09-22 03:11:12 default[20200921t205538]    /workspace/.bundle/gems/ruby/2.7.0/bin/rackup:23:in `load'
2020-09-22 03:11:12 default[20200921t205538]    /workspace/.bundle/gems/ruby/2.7.0/bin/rackup:23:in `<top (required)>'
2020-09-22 03:11:13 default[20200921t205538]  nginx failed to start: aborted, context canceled. subject:"nginx" Timeout:30m0s, attempts:2
2020-09-22 03:11:13 default[20200921t205538]  "GET /favicon.ico HTTP/1.1" 500

【问题讨论】:

  • 部署到标准环境的速度明显快于 flex 中的部署。 “快得令人难以置信”有多快?

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


【解决方案1】:

您提供的日志中的错误指出:

bundler: failed to load command: rackup (/workspace/.bundle/gems/ruby/2.7.0/bin/rackup)

我可以看到您正在使用Puma,并且the App Engine Standard docs 指定了一些依赖于Rack 的应用程序要采取的步骤:

大多数 Web 应用程序使用 Rack 支持的 Web 服务器,例如 Puma, 独角兽或瘦。

您必须在应用程序的Gemfile 中添加服务器作为依赖项 配置文件。运行时将在之前安装所有依赖项 你的入口点被调用。

source "https://rubygems.org"

gem "rack" 
gem "puma"

在 Rails 应用程序中使用 puma 的示例入口点:

entrypoint: bundle exec rails server Puma -p $PORT

instructions for flex 与 Gemfile 和入口点的标准环境相同,所以我不确定为什么一个有效而另一个无效,但我鼓励您仔细检查所有这些说明是否正确实施。

我认为您的 app.yaml 本身没有任何问题,因为如果您传递了 App Engine 中不允许的配置,API 会拒绝部署。

它可能与入口点或依赖项有关。这将允许构建容器并部署它,但当脚本实际尝试启动时会失败。

【讨论】:

  • 这成功了!非常感谢。我添加了“机架”gem,并将入口点从 entrypoint: bundle exec rails --port $PORT 更改为 entrypoint: bundle exec rails server Puma -p $PORT
【解决方案2】:

从描述我相信只有env: flex到env: standard被改变了,所以至少runtime也应该被改变。

如果您查看文档(flex 和 standard),运行时的版本会有所不同。标准环境下由runtime值选择,而灵活环境下的版本在:

.ruby-version 应用程序目录中的文件

在两种环境中可用的app.yaml 选项当然存在其他差异(参考:flex 和standard)。因此,如果您能够在 flex 中进行部署,则必须检查您的所有设置。

【讨论】:

    【解决方案3】:

    你的 app.yaml 至少应该有:

    runtime: ruby25 # or ruby26 or ruby27 for Ruby 2.6 (beta) or Ruby 2.7 (beta)
    entrypoint: bundle exec ruby app.rb
    

    部署到应用引擎标准。这样做然后删除旧的损坏部署。请注意,无需指定env。

    查看this了解更多信息。

    【讨论】:

    • 感谢您的信息。尝试了上述步骤,不幸的是得到了同样的错误。甚至尝试使用 ruby​​25 而不是 ruby​​27。有没有办法像第一次一样重新开始和部署? bundler: failed to load command: rackup (/workspace/.bundle/gems/ruby/2.5.0/bin/rackup) 2020-09-22 17:17:04 default[20200922t111230] Errno::ENOENT: No such file or directory @ rb_sysopen - tmp/pids/server.pid
    猜你喜欢
    • 2020-11-23
    • 2021-10-11
    • 2016-09-26
    • 1970-01-01
    • 2017-09-22
    • 2018-03-12
    • 2018-07-01
    • 2017-11-16
    • 1970-01-01
    相关资源
    最近更新 更多