2010-01-28 59 views
1

我在Ruby on Rails应用程序中使用了两个数据库;一个是应用程序的数据库,而另一个是独立的数据库,Rails不受控制。Ruby on Rails和db:fixtures:load - 它可以忽略某些模型吗?

问题是,当将装置加载到开发环境时,它试图从与开发数据库的连接到独立数据库的表上运行DELETE语句,这显然错误了。

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

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

UPDATE:澄清,Rails的似乎认为从独立数据库中的表是发展连接的一部分,虽然我已经指定使用establish_connection模型类的正确连接。另外需要注意的是,所有的模型类都可以根据需要按照要求从script/console进行精确的操作。

回答

0

好了...我的问题是,我用script/generate创建从二级数据库,这也创造了夹具模型,模式,测试和迁移文件。我已经删除了模式,测试和迁移文件,但没有而不是删除生成的灯具(他们是空文件),因为我不认为它已经创建了任何。

从二级数据库,并删除所有文件(包括型号)后重新运行dev的分贝的迁移,我加回模型文件和数据库中databases.yml从二级分贝,这解决了这个问题。

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

但是,它现在有效。

2
rake db:fixtures:load RAILS_ENV=testing 

会做配置为testing对数据库中的作业在database.yml

+0

我与环保试了一下发布前使用导出设置变量;根据你的建议,我也尝试过这种方式。同样的错误。 – 2010-01-28 20:29:26

+0

您可以编写自己的工具来将* .yml中的数据加载到所需的数据库,这就是我所能提供的信息。 GL – 2010-01-28 20:45:12

+0

'rake db:fixtures:load RAILS_ENV = test'(not testing)for me working for me。 – 2011-09-27 17:16:15

1

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

更好的是,完全删除所有的*.yml文件和stopusingfixtures

+1

这就是我最终从我下面的答案中发现的;但是,它仍然不应该试图从错误的表中删除它们。我是一个PHP/Python家伙,我习惯于模拟测试,而不那么挑剔。迁移很好,但其余的只是头痛。我会检查你提供的链接。谢谢。 – 2010-01-30 19:34:35

1

我想你可能还可以通过添加独立的数据库ActiveRecord的所有表在environment.rb中做到这一点:: SchemaDumper.ignore_tables,就像这样:

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