gpt4 book ai didi

ruby-on-rails - Rails 迁移不在 Google App Engine 部署上运行

转载 作者:太空宇宙 更新时间:2023-11-03 15:28:29 24 4
gpt4 key购买 nike

在部署到 Google App Engine (gcloud app deploy) 时如何运行 Rails 迁移?

我正在尝试使用 Cloud SQL 将 Rails 5 (Ruby 2.3.1) 应用程序部署到 Google App Engine。我遵循了 Google 的 Bookshelf tutorial 中概述的步骤。和他们的 GitHub repo for Cloud SQL设置 app.yaml 和 database.yml。

部署成功完成,我可以查看我的应用程序的登录页面,但是当我转到登录或注册页面时,我收到 500 错误,因为尚未创建用户表。

部署日志的第 8 步似乎提到了 Assets 预编译

Step 8 : RUN if test -d app/assets -a -f config/application.rb; then       bundle exec rake assets:precompile || true;     fi

但是我没有看到像 db:createdb:migrate 这样的东西,我需要在部署时运行它们。

仅供引用,我已经运行了 rake db:migrate 并且一切都在本地按预期工作。

谢谢!

最佳答案

你是对的,它在运行 gcloud app deploy 后没有运行.我们也可能不想从容器中运行它,因为它们有几个,如果我们在所有容器上运行它,那么就会出现竞争条件,有时某些迁移会运行两次,或者也许一个会在另一个完成之前运行。因此,在您要部署的机器上运行它们是有意义的。幸运的是,使用 Google Cloud SQL 代理很容易(当然这假设您使用的是 Cloud SQL)。请参阅此链接以获取文档:https://cloud.google.com/sql/docs/mysql/connect-external-app#proxy

首先,我们设置云 SQL 代理本身(这些适用于 Linux):


wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64
chmod +x cloud_sql_proxy.linux.amd64
sudo mv cloud_sql_proxy.linux.amd64 /usr/local/bin/cloud-sql-proxy

然后使用 gcloud ,登录并将默认项目设置为您当前正在使用的项目(因为云 SQL 代理使用 gcloud 配置来确定如何连接):


gcloud config set project <your project name> # we don't want to deploy or connect to the wrong project!
gcloud auth list # make sure you're dealing with the account you should be
gcloud auth application-default login

最后一步是必要的,因为我正在从 Google Compute Engine VM 进行部署,该 VM 已经使用没有正确凭据的服务帐户登录。

然后设置cloud sql proxy socket目录。这也适用于 Postgres。只需确保它与您的生产配置所期望的目录相同:


sudo mkdir /cloudsql
sudo chown $USER /cloudsql

然后在另一个窗口或后台启动cloud sql proxy:


cloud-sql-proxy -dir /cloudsql

然后运行部署任务和迁移:


gcloud app deploy
RAILS_ENV=production rake db:migrate

当我刚刚设置它时,如果您在部署之前运行迁移(这需要很长时间!),您的站点将会关闭,这让我感到很沮丧。如果您之后运行迁移,那么根据健康检查的设置方式,它可能会检测到新版本不健康。自 config.active_record.migration_error默认情况下未在生产环境中设置,我认为最好的选择是在部署后运行迁移,除非您想设置健康检查,以便健康检查端点在存在未决迁移时引发异常。然后您可以让您的应用程序在迁移完成的确切时间转移到新版本。但是,由于定期运行健康检查的性质,您仍然会有几秒钟的停机时间。上面的两行脚本(在部署后运行迁移)可能是您无需付出更多努力即可获得的最佳脚本。

关于ruby-on-rails - Rails 迁移不在 Google App Engine 部署上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41450437/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com