虚拟应用程序中的数据表错误 - 列不存在
Datatable error in dummy app - column does not exist
我有一个带有引擎的应用程序。在这个应用程序中,我创建了一个用于测试的虚拟应用程序。
我在 my_engine
中添加了一个新迁移。
然后我在虚拟应用程序中导入这个新迁移 运行ning rails my_engine:install:migrations
然后 'rake db:migrate'.
所以知道这两个模式看起来是一样的。
然而,当我 运行 我的测试得到
ActiveRecord::StatementInvalid: PG::UndefinedColumn: ERROR: column my_table.new_field does not exist
你有什么想法吗?
您可能只是 运行 在 development
环境中迁移,而不是在 test
环境中(因此,不在测试 table 中)。
使用 RAILS_ENV=test
前缀执行相同的命令
在您的 test
环境中尝试 运行ning RAILS_ENV=test rake db:migrate
到 运行 迁移。
或者,如果您使用的是 rails 4.1+,则可以将 ActiveRecord::Migration.maintain_test_schema!
添加到 rails_helper
https://relishapp.com/rspec/rspec-rails/docs/upgrade
What this does is that rather than just raising when the test schema has
pending migrations, Rails will try to load the schema. An exception will
now only be raised if there are pending migrations afterwards the schema
has been loaded.
There are a few caveates to be aware of when using this:
Migrations still need to be run manually; although now this only has to be done in the 'development' environment
An exception will be raised If the schema has not been initialized. The exception will provide instructions stating rake db:migrate needs to be run.
所以添加这个意味着你只需要 运行 db:migrate
一次;就在你的 development
我有一个带有引擎的应用程序。在这个应用程序中,我创建了一个用于测试的虚拟应用程序。
我在 my_engine
中添加了一个新迁移。
然后我在虚拟应用程序中导入这个新迁移 运行ning rails my_engine:install:migrations
然后 'rake db:migrate'.
所以知道这两个模式看起来是一样的。
然而,当我 运行 我的测试得到
ActiveRecord::StatementInvalid: PG::UndefinedColumn: ERROR: column my_table.new_field does not exist
你有什么想法吗?
您可能只是 运行 在 development
环境中迁移,而不是在 test
环境中(因此,不在测试 table 中)。
使用 RAILS_ENV=test
前缀执行相同的命令
在您的 test
环境中尝试 运行ning RAILS_ENV=test rake db:migrate
到 运行 迁移。
或者,如果您使用的是 rails 4.1+,则可以将 ActiveRecord::Migration.maintain_test_schema!
添加到 rails_helper
https://relishapp.com/rspec/rspec-rails/docs/upgrade
What this does is that rather than just raising when the test schema has pending migrations, Rails will try to load the schema. An exception will now only be raised if there are pending migrations afterwards the schema has been loaded.
There are a few caveates to be aware of when using this:
Migrations still need to be run manually; although now this only has to be done in the 'development' environment An exception will be raised If the schema has not been initialized. The exception will provide instructions stating rake db:migrate needs to be run.
所以添加这个意味着你只需要 运行 db:migrate
一次;就在你的 development