0

我有一个部署到 GCP 的 Rails 6.0.0.rc1 应用程序(安装了 appengine gem)。有没有办法在运行应用程序的实例上登录远程 Rails 控制台?我试过这个:

bundle exec rake appengine:exec -- bundle exec rails c

给出以下输出:

...
---------- EXECUTE COMMAND ----------
bundle exec rails c
Loading production environment (Rails 6.0.0.rc1)
Switch to inspect mode.
...

显然它执行了命令,但之后立即关闭了连接。

是否有捷径可寻?

作为参考:在 Heroku 上,这只是:

heroku run rails c --app my-application
4

1 回答 1

0

涉及几个步骤:

https://gist.github.com/kyptin/e5da270a54abafac2fbfcd9b52cafb61

如果您在 Google App Engine 的灵活环境中运行 Rails 应用程序,则需要进行一些设置才能访问连接到已部署环境的 rails 控制台。我想记录这些步骤以供我自己参考,也可以作为对其他人的帮助。

打开 Google Cloud Platform (GCP) 控制台的 Google App Engine -> 实例部分。

为正在运行的实例选择“SSH”下拉菜单。(哪个实例?我的两个实例都在同一个集群中,并且都在运行 Rails,所以对我来说没关系。YMMV。)您可以选择如何通过 ssh 连接。

选择“在浏览器窗口中打开”以打开基于 Web 的 SSH 会话,这很方便,但可能会很尴尬。

选择“查看 gcloud 命令”以查看和复制可以从终端使用的 gcloud 命令,这使您可以使用自己喜欢的终端应用程序,但可能需要安装 gcloud 命令和使用 GCP 验证 gcloud 命令的额外步骤。

当您处于您选择的 SSH 会话中时,运行 sudo docker ps 以查看当前正在运行的 docker 容器。

确定您的应用程序的容器。这是我的输出的样子(为了便于阅读而缩写)。我的应用程序的容器是第一个。

jeff@aef-default-425eaf...hvj:~$ sudo docker ps 容器 ID 图像命令名称 38e......552 us.gcr.io/my-project/appengine/default... "/bin/ sh -c 'exec bun" gaeapp 8c0......0ab gcr.io/google_appengine/cloud-sql-proxy "/cloud_sql_proxy -di"focused_lalande 855......f92 gcr.io/google_appengine/api-代理 "/proxy" api 7ce......0ce gcr.io/google_appengine/nginx-proxy "/var/lib/nginx/bin/s" nginx_proxy 25f......bb8 gcr.io/google_appengine/ fluentd-logger "/opt/google-fluentd/" fluentd_logger 记下您的应用程序的容器名称(在我的例子中是 gaeapp),然后运行 ​​container_exec bash。

将 ruby​​ 和 node 添加到您的环境中: export PATH=$PATH:/rbenv/versions/2.3.4/bin:/rbenv/bin:/nodejs/bin

cd /app 以获取您的应用程序代码。

将 Rails 应用程序期望的任何必要的环境变量添加到您的环境中。例如:export DATABASE_URL='...'

如果不知道自己的应用需要什么,可以通过 cat app.yaml 查看应用的完整环境。

bin/rails console production 在 Rails 生产环境中启动 Rails 控制台。

于 2019-06-03T16:20:48.603 回答