Ruby on Rails和db:fixtures:load - 它可以忽略一些模型吗?

时间:2010-01-28 20:04:45

标签: ruby-on-rails database fixtures

我在Ruby on Rails应用程序中使用了两个数据库;一个是应用程序的数据库,而第二个是一个独立的数据库,Rails没有被控制。

问题是当将fixtures加载到dev中时,它会尝试从连接到dev数据库的独立数据库中的表上运行DELETE语句,这显然会出错。

我不希望Rails尝试做任何事情但是阅读独立数据库 - 我特别不希望它试图删除表格。

有没有一种简单的方法可以告诉Rails在加载灯具时忽略第二个数据库的模型?

更新:为了澄清,Rails似乎认为独立数据库中的表是开发连接的一部分,尽管我已使用establish_connection在模型类中指定了正确的连接。另外注意,所有模型类都可以根据需要从script/console精确地工作。

4 个答案:

答案 0 :(得分:2)

rake db:fixtures:load RAILS_ENV=testing

将为testing

中配置为database.yml的数据库执行此任务

答案 1 :(得分:1)

删除test/fixtures目录中的model_name.yml文件,Rails不会尝试删除这些表。

更好的是,完全删除所有*.yml个文件和stop using fixtures

答案 2 :(得分:1)

我认为您也可以通过将独立数据库中的所有表添加到environment.rb中的ActiveRecord :: SchemaDumper.ignore_tables来实现此目的,如下所示:

ActiveRecord::SchemaDumper.ignore_tables = ['independent_db_table1', 'independent_db_table2']

答案 3 :(得分:0)

好的......我的问题是我使用script/generate从辅助数据库创建模型,辅助数据库还创建了夹具,模式,测试和迁移文件。我删除了架构,测试和迁移文件,但删除了生成的灯具(它们是空文件),因为我认为它没有创建任何。

从辅助数据库中删除所有文件(包括模型)并重新运行dev db的迁移后,我添加了模型文件和来自辅助数据库的databases.yml中的数据库,解决了这个问题。

我仍然无法解释为什么Rails的rake任务在错误的数据库中查找,我对rails在辅助数据库中添加schema_migrations表有点失望,这显然不需要。

然而,它现在有效。