我已经用Ruby和Rails创建了一个应用程序。问题是,当我开发它时,我在迁移时遇到了一些问题,因为我创建了迁移但使用了错误的语法。发生的是,我删除了一些文件,因为卖出的无效迁移与新迁移具有相同的名称,但是在此过程中,我意外删除了一些迁移(显然是在运行rails db:migrate之后)。该项目实际使用。例如,我有与保留表相关的服务表,因为服务有Reservation_id,但是我没有迁移文件说AddReservationIdToService。
所以现在我想使用Heroku进行生产。事实是O必须更改为postgresql,因为Heroku不支持sqlite。因此,我必须再次运行de:migrate才能在新数据库中创建表和关系,但是我需要我解释删除的文件。问题是:
我可以手动创建迁移,所以当我为PostgreSQL运行db:migrate时,会创建数据库的完整结构而又不缺少关系吗?
是,您可能会另外创建几个迁移文件。验证您现在已经在本地使用sqlite拥有了想要的表。将这些表画在一张纸上(或最好的地方),然后检查此正式文件API documentation of Rails。
删除之前进行的所有迁移,并根据您绘制的表创建另一个迁移。
工作流程将类似于:
1]“我需要创建一个名为Reservation的表,该表在文档中显示在哪里?”
2)“我需要一个名为Service的表,该表在文档中显示在哪里?
3)“我需要为服务reservaton_id添加带有外键的列,本文档怎么说?
对于上述所有步骤,请像通常一样创建对应的迁移文件。
这里的主要区别是不在本地运行迁移。而是将您的新版本应用程序推送到heroku远程分支,然后there
运行迁移,例如:heroku run rails db:migrate
请记住不要在本地运行相同的迁移,因为您已经在本地拥有这些表。
最后两个建议是:
1)如果迁移没有按预期进行,请不要删除迁移文件。而是运行rails db:rollback
,然后重试。
2)继续在版本控制的同一分支上跟踪迁移文件。
您实际上并不需要迁移来重新创建现有的数据库-实际上,出于几个原因(包括遇到的丢失的迁移文件问题)进行尝试不是一个好主意。您可以简单地运行: