如何从 Google App Engine 从灵活环境更改为标准环境
How do change from Google App Engine from Flexible Environment to Standard environment
我正在尝试从灵活环境迁移到标准环境。我犯了一个错误,在第一次部署时我的 app.yaml 中有 env: flex
。当我使用 env: standard
进行部署时,我得到了确认 Deployed service [default] to [project]
,尽管部署速度似乎快得令人难以置信。当我请求该应用程序时,出现 500 错误。我在 rails 上使用 ruby。
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
根据描述我认为只有 env: flex
到 env: standard
被改变了,所以至少 runtime
也应该被改变。
如果您查看文档 (flex and standard),运行时的版本指定不同。在标准环境中它是由 runtime
值选择的,而在灵活环境版本中是在:
.ruby-version
file in your application directory
在两种环境中可用的 app.yaml
选项当然还有其他差异(参考文献:flex and standard)。因此,如果您能够在 flex 中部署,则必须检查所有设置。
您的 app.yaml 应该至少有:
runtime: ruby25 # or ruby26 or ruby27 for Ruby 2.6 (beta) or Ruby 2.7 (beta)
entrypoint: bundle exec ruby app.rb
部署到 App Engine 标准。这样做然后删除旧的损坏部署。请注意,无需指定 env
.
查看 this 了解更多信息。
您提供的日志中的错误指出:
bundler: failed to load command: rackup (/workspace/.bundle/gems/ruby/2.7.0/bin/rackup)
我看到你正在使用 Puma, and the App Engine Standard docs specify some steps to take for apps that depend on Rack:
Most web applications use a Rack-supported web server such as Puma,
Unicorn or Thin.
You must add the server as a dependency in your application's Gemfile
configuration file. The runtime will install all dependencies before
your entrypoint is called.
source "https://rubygems.org"
gem "rack"
gem "puma"
An example entrypoint using puma for a Rails application:
entrypoint: bundle exec rails server Puma -p $PORT
instructions for flex 与有关 Gemfile 和入口点的标准环境相同,所以我不确定为什么一个有效而另一个无效,但我鼓励您 double-check如果所有这些说明都得到正确执行。
我认为您的 app.yaml
本身没有任何问题,因为如果您传递了 App Engine 不允许的配置,API 会拒绝部署。
可能与入口点或依赖项有关。这将允许构建容器并部署它,但是当脚本实际尝试启动时会失败。
我正在尝试从灵活环境迁移到标准环境。我犯了一个错误,在第一次部署时我的 app.yaml 中有 env: flex
。当我使用 env: standard
进行部署时,我得到了确认 Deployed service [default] to [project]
,尽管部署速度似乎快得令人难以置信。当我请求该应用程序时,出现 500 错误。我在 rails 上使用 ruby。
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
根据描述我认为只有 env: flex
到 env: standard
被改变了,所以至少 runtime
也应该被改变。
如果您查看文档 (flex and standard),运行时的版本指定不同。在标准环境中它是由 runtime
值选择的,而在灵活环境版本中是在:
.ruby-version
file in your application directory
在两种环境中可用的 app.yaml
选项当然还有其他差异(参考文献:flex and standard)。因此,如果您能够在 flex 中部署,则必须检查所有设置。
您的 app.yaml 应该至少有:
runtime: ruby25 # or ruby26 or ruby27 for Ruby 2.6 (beta) or Ruby 2.7 (beta)
entrypoint: bundle exec ruby app.rb
部署到 App Engine 标准。这样做然后删除旧的损坏部署。请注意,无需指定 env
.
查看 this 了解更多信息。
您提供的日志中的错误指出:
bundler: failed to load command: rackup (/workspace/.bundle/gems/ruby/2.7.0/bin/rackup)
我看到你正在使用 Puma, and the App Engine Standard docs specify some steps to take for apps that depend on Rack:
Most web applications use a Rack-supported web server such as Puma, Unicorn or Thin.
You must add the server as a dependency in your application's
Gemfile
configuration file. The runtime will install all dependencies before your entrypoint is called.source "https://rubygems.org" gem "rack" gem "puma"
An example entrypoint using puma for a Rails application:
entrypoint: bundle exec rails server Puma -p $PORT
instructions for flex 与有关 Gemfile 和入口点的标准环境相同,所以我不确定为什么一个有效而另一个无效,但我鼓励您 double-check如果所有这些说明都得到正确执行。
我认为您的 app.yaml
本身没有任何问题,因为如果您传递了 App Engine 不允许的配置,API 会拒绝部署。
可能与入口点或依赖项有关。这将允许构建容器并部署它,但是当脚本实际尝试启动时会失败。