对于Ruby on Rails迁移过程,我似乎有一个循环问题。我正在关注介绍文章,当我需要创建我的第一个表时,我已经达到了这一点。
我运行了以下内容,
[tims@web2 working_ror]# rails generate model Homepage first_name:string last_name:string email:string message:text
invoke active_record
create db/migrate/20131119203948_create_homepages.rb
create app/models/homepage.rb
invoke test_unit
createtest /models/homepage_test.rb
createtest /fixtures/homepages.yml
然后我继续进行迁移,
[tims@web2 working_ror]# rake db:migrate
== CreateHomepages: migrating ================================================
-- create_table(:homepages)
-> 0.0493s
== CreateHomepages: migrated (0.0494s) =======================================
然而,当我运行我的应用程序时,我看到以下消息,
Migrations are pending; run 'bin/rake db:migrate RAILS_ENV=development' to resolve this issue.
但是,如果我执行上述操作,
[tims@web2 working_ror]# rake db:migrate RAILS_ENV=development
[tims@web2 working_ror]#
并且消息继续......
我花了相当多的时间研究论坛 - 我最接近的就是放弃并重新构建所有内容,这些都做了以下事情。
rake db:drop rake db:create rake db:migrate
,结果是一样的。
答案 0 :(得分:27)
你需要做
bundle exec rake test:prepare
或
bundle exec rake db:test:prepare
然后
bundle exec rake db:migrate
在运行规范之前
干杯
答案 1 :(得分:6)
你可以做到
bundle exec rake test:prepare
在Rails 4.1+中,他们弃用了db:test:prepare 你现在可以使用:
ActiveRecord::Migration.maintain_test_schema!
如果您需要手动执行
rake db:schema:load RAILS_ENV=test
然后
bundle exec rake db:migrate
答案 2 :(得分:4)
试 在RAILS_ROOT / config / environments / development.rb中将以下设置设置为false:
config.active_record.migration_error = false#:page_load
答案 3 :(得分:1)
当您的迁移被搞砸(文件被删除,手动重命名等)时,您可以使用一个奇怪的技巧
schema_migrations
的表格并浏览其内容。它应该有一个名为version
的列。 Rails使用此字段来检查迁移是否是最新的。 答案 4 :(得分:0)
检查以确保该表尚不存在:
drop table TABLENAME;
答案 5 :(得分:0)
这可能是因为您已向具有旧数据的表中添加了新列,而这些旧数据现在缺少值。我的测试数据库也遇到了同样的问题,仅通过运行即可解决
$ rails db:setup
注意
它将删除所有数据。此命令运行rails db:reset
,rails db:migrate
和rails db:seed
答案 6 :(得分:-1)
这就是我所做的:
rails db:environment:set RAILS_ENV=test
如果您需要手动执行
rake db:schema:load RAILS_ENV=test
然后
bundle exec rake db:migrate
感谢Ahmed Ali .......您的评论很有帮助。