如何设计db:migrate适用于生产

时间:2016-02-29 17:43:38

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

我在RoR上做了我的第一个项目我决定使用Devise gem进行身份验证在Localhost中一切正常,现在我可以使用sing_up,log_in,reset pass和其他一些默认功能随设计而来。

我不明白的是,一旦我将项目推向生产环境,一切都会得到解决。让我解释一下。

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

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

1)发布一次代码的执行方式 2)如何创建用户表 3)我在哪里需要指定数据库连接(db,user,pass)

一般来说,如何迁移到生产环境?

感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

在rails中,使用迁移来控制数据库模式。迁移通常是位于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. 如果部署失败,很容易回滚最新的更改。 (并非总是如此)
  3. 那么如何在生产中使用它?您只需将rake任务指向正确的数据库:

    RAILS_ENV=production rake db:migrate
    

    您可以在config / database.yml文件中找到您的数据库配置。请注意,这是不将该文件存储在源代码管理中的最佳做法,如果是生产,则不建议在那里存储数据库密码。通常,您需要通过环境变量进行设置。

    重要的是要记住有关迁移的一些事情:

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

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

答案 1 :(得分:0)

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

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

希望能回答你的问题吗?