我在RoR上做了我的第一个项目我决定使用Devise gem进行身份验证在Localhost中一切正常,现在我可以使用sing_up,log_in,reset pass和其他一些默认功能随设计而来。
我不明白的是,一旦我将项目推向生产环境,一切都会得到解决。让我解释一下。
- 我看到该设计基于设计自动生成的user.rb模型生成db / schema.rb文件,我假设需要在生产数据库中创建这些模式。
我必须将项目推送到git repo但是..
1)发布一次代码的执行方式 2)如何创建用户表 3)我在哪里需要指定数据库连接(db,user,pass)
一般来说,如何迁移到生产环境?
感谢您的帮助。
答案 0 :(得分:3)
在rails中,使用迁移来控制数据库模式。迁移通常是位于db/migrations
文件夹中的非常小的文件。它们中的每一个都定义了ActiveRecord::Migration
类的单个子类。
每次迁移都应该是双向的,因此它必须同时实现up
和down
方法(用于回滚)。在大多数变化中,这些变化是显而易见的(例如,当向上操作创建表时,向下操作应该销毁它)。对于像这样的迁移,您可以使用change
函数 - rails将自动创建down
函数(假设所有操作都是可逆的 - 某些方法甚至接受额外的参数以使其成为可能remove_column :table, :field, :integer
。:integer
这里似乎有点多余,但如果没有这些信息,行动是不可逆转的)。
您使用db:migrate
rake任务运行迁移。实际上,它将运行尚未针对当前数据库运行的所有迁移。完成后,它会将您当前的数据库转储到db/schema.rb
文件中。此文件仅用作当前数据库模式的快照,如果您需要返回到应用程序的先前版本(这就是为什么schema.rb应始终检查到源代码管理中),这将非常有用。也可以直接从该文件rake db:schema:load
重新创建数据库,但这会花费您所有数据。
如果检查数据库(任何环境),您会注意到有一个名为schema_migrations
的额外表,它不会出现在您的模式文件中。此表包含针对此数据库执行的所有迁移。这样rails就不会重试已经运行的迁移。
使用迁移系统有许多优点:
那么如何在生产中使用它?您只需将rake任务指向正确的数据库:
RAILS_ENV=production rake db:migrate
您可以在config / database.yml文件中找到您的数据库配置。请注意,这是不将该文件存储在源代码管理中的最佳做法,如果是生产,则不建议在那里存储数据库密码。通常,您需要通过环境变量进行设置。
重要的是要记住有关迁移的一些事情:
如果有人已经运行过,那么永远不要改变现有的迁移。特别是,除非您100%确定自己在做什么(例如修复回滚),否则不要修改已在生产中运行的迁移。由于数据库会记住哪些迁移已经运行,因此可能会导致本地数据库与生产数据库不同步,从而导致错误。
永远不要手动更改数据库架构 - 必须通过迁移进行每项更改。
答案 1 :(得分:0)
根据您托管代码的位置,您仍应执行rake db:migrate以对生产数据库进行更改。
如果在Heroku上部署,请在控制台中运行以下命令: heroku运行rake db:migrate
希望能回答你的问题吗?