我在Ruby on Rails应用程序中使用了两个数据库;一个是应用程序的数据库,而第二个是一个独立的数据库,Rails没有被控制。
问题是当将fixtures加载到dev中时,它会尝试从连接到dev数据库的独立数据库中的表上运行DELETE语句,这显然会出错。
我不希望Rails尝试做任何事情但是阅读独立数据库 - 我特别不希望它试图删除表格。
有没有一种简单的方法可以告诉Rails在加载灯具时忽略第二个数据库的模型?
更新:为了澄清,Rails似乎认为独立数据库中的表是开发连接的一部分,尽管我已使用establish_connection
在模型类中指定了正确的连接。另外注意,所有模型类都可以根据需要从script/console
精确地工作。
答案 0 :(得分:2)
rake db:fixtures:load RAILS_ENV=testing
将为testing
database.yml
的数据库执行此任务
答案 1 :(得分:1)
答案 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
表有点失望,这显然不需要。
然而,它现在有效。