【问题标题】:how devise db:migrate works on productiondevise db:migrate 如何在生产中工作
【发布时间】:2016-06-12 20:55:47
【问题描述】:

我正在做我的第一个关于 RoR 的项目我决定使用 Devise gem 进行身份验证,在 Localhost 中一切正常,现在我能够唱歌、登录、重置密码和一些其他的默认功能。 .

我不明白的是,一旦我将项目推入生产环境,一切都会如何设置。让我解释得更好。

-我看到设计基于设计自动生成的 user.rb 模型生成 db/schema.rb 文件,我假设这些模式需要在生产数据库中创建。

我必须将项目推送到 git repo 但是..

1) 代码发布后如何执行 2)如何创建用户表 3)我需要在哪里指定db连接(db,user,pass)

一般来说,迁移到生产环境的过程是怎样的?

感谢您的帮助。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 devise rake dbmigrate


    【解决方案1】:

    在 rails db 模式中使用迁移来控制。迁移通常是位于db/migrations 文件夹中的非常小的文件。它们中的每一个都定义了ActiveRecord::Migration 类的单个子类。

    每个迁移都应该是双向的,因此它必须同时实现updown 方法(用于回滚)。在大多数更改中,这些都是显而易见的(例如,当向上操作创建一个表时,向下操作应该破坏它)。对于这样的迁移,您可以使用 change 函数 - rails 将自动创建 down 函数(假设所有操作都是可逆的 - 有些方法甚至接受额外的参数以使其成为可能,例如 remove_column :table, :field, :integer:integer 位可能在这里似乎是多余的,但是如果没有该信息,该操作是不可逆转的)。

    您使用db:migrate rake 任务运行您的迁移。实际上,它将运行所有尚未针对当前数据库运行的迁移。完成后,它会将您当前的数据库转储到db/schema.rb 文件中。该文件仅用作当前数据库模式的快照,如果您需要返回应用程序的先前版本(这就是为什么应该始终将 schema.rb 检入源代码控制),这将非常有用。也可以直接从该文件 rake db:schema:load 重新创建您的数据库,但是这会花费您所有的数据。

    如果您检查您的数据库(任何环境),您会注意到有一个名为schema_migrations 的额外表没有出现在您的架构文件中。此表包含已针对此数据库执行的所有迁移。这样,rails 将不会重试已经运行的迁移。

    使用迁移系统有很多好处:

    1. 每个开发人员都可以轻松地将其本地数据库升级到最新架构。
    2. 如果部署失败,很容易回滚您的最新更改。 (并非总是如此)

    那么如何在生产中使用它呢?您只需将 rake 任务指向正确的数据库:

    RAILS_ENV=production rake db:migrate
    

    您可以在 config/database.yml 文件中找到您的数据库配置。请注意,最好不要将该文件存储在源代码管理中,并且在生产的情况下,不建议将数据库密码存储在那里。通常需要通过环境变量来设置。

    记住关于迁移的几件事很重要:

    1. 如果有人可能已经运行了现有迁移,则永远不要更改现有迁移。特别是,除非您 100% 确定自己在做什么(例如修复回滚),否则不要修改已在生产中运行的迁移。由于数据库会记住哪些迁移已运行,这可能会导致本地数据库与生产数据库不同步,从而导致错误。

    2. 永远不要手动更改数据库架构 - 每项更改都必须通过迁移进行。

    【讨论】:

    • 非常感谢您的回答,再问一个问题。让我给你这个场景。我在 git 上有 CVS,其中推送更改,然后其他人将这些更改拉入他的服务器(不是 Heroku 或任何商业主机)。 1) 该人是否必须在他的服务器上运行“rake db:migrate RAILS_ENV=production”?.. 2) 因为在“database.yml”文件上设置了身份验证设置,这是否可行? 3)有没有更好的方法可以让我将任务设置为自动运行,这样这个人就不必运行“rake:migrate”,我听说过一些关于“Capistrano”的事情。谢谢
    【解决方案2】:

    根据您托管代码的位置,您仍然应该执行 rake db:migrate 来对生产数据库进行更改。

    如果部署在 Heroku 上,请在控制台中运行以下命令: heroku 运行 rake db:迁移

    希望这能回答您的问题?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多