部署 ruby api 谷歌云
Posted
技术标签:
【中文标题】部署 ruby api 谷歌云【英文标题】:Deploy ruby api google cloud 【发布时间】:2018-04-13 18:55:44 【问题描述】:我是谷歌云的新手,当我尝试将我的 ruby api 部署到谷歌云时遇到了这个问题,这是我所做的:
我已将我的 ruby api 上传到 github(在 localhost 上运行良好),这里 >> https://github.com/guisantogui/it
我一直在学习 hello world google 教程 >> https://cloud.google.com/ruby/getting-started/hello-world
它按预期工作,但是当我上传自己的应用程序时,我收到了http 502 bad gateway
消息,日志如下:
2017-10-30 23:48:53 default[20171030t213633] => Booting Puma
2017-10-30 23:48:53 default[20171030t213633] => Rails 5.1.4 application starting in production
2017-10-30 23:48:53 default[20171030t213633] => Run `rails server -h` for more startup options
2017-10-30 23:48:53 default[20171030t213633] Puma starting in single mode...
2017-10-30 23:48:53 default[20171030t213633] * Version 3.10.0 (ruby 2.4.1-p111), codename: Russell's Teapot
2017-10-30 23:48:53 default[20171030t213633] * Min threads: 5, max threads: 5
2017-10-30 23:48:53 default[20171030t213633] * Environment: production
2017-10-30 23:48:53 default[20171030t213633] * Listening on tcp://0.0.0.0:3000
2017-10-30 23:48:53 default[20171030t213633] Use Ctrl-C to stop
2017-10-30 23:58:01 default[20171030t213633] "GET /" 502
2017-10-30 23:58:02 default[20171030t213633] "GET /favicon.ico" 502
2017-10-30 23:58:06 default[20171030t213633] "GET /" 502
2017-10-30 23:58:06 default[20171030t213633] "GET /favicon.ico" 502
2017-11-01 10:54:50 default[20171030t213633] "GET /" 502
2017-11-01 10:54:50 default[20171030t213633] "GET /favicon.ico" 502
2017-11-01 10:55:02 default[20171030t213633] "GET /favicon.ico" 502
2017-11-01 10:55:02 default[20171030t213633] "GET /tatoo_artis/list" 502
最后,我认为 app.yaml 文件更重要:
entrypoint: bundle exec rails server Puma -p 3000
env: flex
runtime: ruby
提前致谢,我不知道是什么问题以及如何解决它!
【问题讨论】:
这看起来像是某处的错误配置,因为该应用程序非常简单。您还有其他来自 GCP 的日志可以分享吗? 【参考方案1】:Google Cloud 示例 https://cloud.google.com/ruby/getting-started/hello-world 使用 Sinatra,而不是 Rails。 如果您在 app.yaml 文件中检查 https://github.com/GoogleCloudPlatform/ruby-docs-samples/tree/master/appengine/hello_world 它只是:
# [START app_yaml]
runtime: ruby
env: flex
entrypoint: bundle exec ruby app.rb
# [END app_yaml]
而 app.rb 只是一个简单的 sinatra 应用程序。
# [START app]
require "sinatra"
get "/" do
"Hello world!"
end
# [END app]
Rails 配置稍微复杂一些。首先,GCP App Engine似乎不支持Puma(如果我错了请纠正我),但是rackup,你需要设置一些环境变量,比如SECRET_KEY(使用bundle exec rails secret
),所以你的app.yaml文件应该是:
# [START app_yaml]
runtime: ruby
env: flex
entrypoint: bundle exec rackup --port $PORT
env_variables:
SECRET_KEY_BASE: [SECRET_KEY]
# [END app_yaml]
记住你还需要运行:
RAILS_ENV=production bundle exec rails assets:precompile
运行前
gcloud app deploy
预编译您的资产。
您要查找的内容在本指南中:https://cloud.google.com/ruby/rails/appengine,跳过初始步骤(因为您已经拥有该应用)并直接转到:“将应用部署到 App Engine 柔性环境”
来源: 谷歌指南:https://cloud.google.com/ruby/rails/appengine
代码:https://github.com/GoogleCloudPlatform/ruby-docs-samples/tree/master/appengine/rails-hello_world
编辑: 我看到你的日志中有一些 GET 请求,所以可能支持 Puma。尝试只设置 SECRET_KEY 并在部署之前预编译您的资产。
【讨论】:
以上是关于部署 ruby api 谷歌云的主要内容,如果未能解决你的问题,请参考以下文章