部署 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 谷歌云的主要内容,如果未能解决你的问题,请参考以下文章

新浪云阿里云百度云谷歌云亚马逊云

如何使用谷歌应用引擎将 php 项目部署到谷歌云中?

如何在谷歌云功能中使用谷歌表格 API

在谷歌云中部署后,Angular 应用程序无法调用 Flask 服务器 API

谷歌云视觉 API - Python

谷歌方向API找不到我的API密钥