如何将Google App Engine从灵活环境更改为标准环境

时间:2020-09-22 03:21:12

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

我正在尝试从灵活的环境迁移到标准环境。我犯了一个错误,那就是在第一次部署时我的app.yaml中有env: flex。当我使用env: standard进行部署时,我得到了确认Deployed service [default] to [project],尽管部署似乎太快了,无法实现。当我请求该应用程序时,出现500错误。我在轨道上使用红宝石。

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

3 个答案:

答案 0 :(得分: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"

将puma用于Rails应用程序的示例入口点:

entrypoint: bundle exec rails server Puma -p $PORT

instructions for flex与关于Gemfile和入口点的标准环境相同,因此我不确定一个为什么起作用而另一个不起作用,但是我建议您仔细检查所有这些指示已正确实施。

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

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

答案 1 :(得分:0)

根据说明,我相信只有env: flexenv: standard被更改了,因此至少也必须更改runtime

如果您查看文档(flexstandard),则运行时的版本将以不同的方式指定。在标准环境中,它是通过runtime值选择的,而在灵活环境中,版本是:

您应用程序目录中的

.ruby-version文件

在两种环境下,app.yaml选项中当然还有其他差异(参考:flexstandard)。因此,如果您能够在Flex中进行部署,则必须查看所有设置。

答案 2 :(得分:0)

您的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以获得更多信息。