- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在部署到 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:create
和 db: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/
sanitize 是什么意思在 Rails 中是什么意思? 我正在阅读 CanCanCan 的文档.它说: When using strong_parameters or Rails 4+, you
在过去的几个月里,我感觉自己对 Ruby on Rails (RoR) 开发的了解达到了极限。我为大/小客户和 friend /爱好项目开发了大大小小的应用程序。我知道如何开发这些应用程序,但开始感觉
我昨天参加了一个关于扩展 Rails 的聚会,其中一个主题是 Hexagonal Rails。然而,我只做了一年的 Rails,对 MVC 结构非常满意(也许太舒服了),所以我不太了解适配器和消息队列
我使用多个 Rails 应用程序,一些在 Rails 3.2/Ruby 2.0 上,一些在 Rails 2.3/Ruby 1.8.7 上。 他们的共同点是,随着他们的成长和添加更多的依赖项/ gem
这个问题在这里已经有了答案: Using Rails-UJS in JS modules (Rails 6 with webpacker) (5 个答案) 关闭 3 年前。 我正在尝试使用 UJS
我正在开发一个当前使用 Rails 1.2 的 Rails 应用程序,所以我现在离最新的稳定版本(Rails 2.3)还有很长的路要走。 我应该如何进行迁移到更新版本的 Rails 的过程? 我应该一
尝试按照 Ryan Bates Backbone.js 教程构建抽奖应用程序,但我已经遇到了第一段代码的问题。在 application.js 的 init 函数中,他初始化了 Raffler 路由的
我正在使用 Rails 3.2 并且我有一个数据库表,我想在其中找到符合以下条件的所有行: a = true and b = true and ( 0 true, :b =>
我有一个用户类和一个联系人,其中联系人是用户的子类。这两个类都存储在用户表中。 我的联系人可能有也可能没有电子邮件地址,而我的用户需要一个电子邮件地址(我的用户模型定义中有 validates_pre
我正在编写一个教程,我在其中演示了一些 rails 命令。在我的机器上 rails和 script/rails两者都同样有效。有“首选”形式吗?两者中哪一个更普遍? 最佳答案 当您运行 rails 时
我正在寻找有关通过我的应用程序前进的最佳方式的建议,这是我首次开始集成Elasticsearch。我是一名初学者,但是热衷于深入研究,以便原谅任何明显的错误! 我遵循了http://www.sitep
我刚刚用 Rails new 启动了一个新的 Rails 应用程序,将默认数据库设置更改为 PostgresSQL。我用 bin/rails s 启动服务器,结果很奇怪 2016-04-21 05:0
我收到一个参数并希望它是这样的字符串: "abc,efg" 或者像这样的数组 ["abc","efg"] 在第一种情况下,我想将它转换成一个数组,什么是好的方法? 这是我的想法 if params[:
我刚刚用 Rails new 启动了一个新的 Rails 应用程序,将默认数据库设置更改为 PostgresSQL。我用 bin/rails s 启动服务器,结果很奇怪 2016-04-21 05:0
我收到一个参数并希望它是这样的字符串: "abc,efg" 或者像这样的数组 ["abc","efg"] 在第一种情况下,我想将它转换成一个数组,什么是好的方法? 这是我的想法 if params[:
我有 Rails 4,这是我的默认版本(我仍然希望它是)。但我不想在我的电脑上添加 rails 3.2。在以下命令中:gem install rails -v 3.2.16 我有这个警告: railt
您好,我想使用 Sheevaplug 构建一个“Rails Brick”来自 Marvell(操作系统是开箱即用的 Ubuntu,但您可以在其上安装其他发行版)。它将成为家庭服务器和静音、低成本(99
我需要能够从 Rails 控制台发送我的 Rails 应用程序的 Postgres 数据库中所有未接受的邀请。 (我有一个名为 Invitations 的表,其中包含一个名为 accepted 的 b
validate :cannot_modify_if_locked, on: :update def cannot_modify_if_locked if self.locked erro
我正在学习教程(学习 Rails 播客),需要更改以下路由语法,以便它与 Rails 3.0 兼容。谁能帮忙? map.view_page ':name', :controller => 'viewe
我是一名优秀的程序员,十分优秀!