【发布时间】:2016-07-07 15:01:58
【问题描述】:
我有一个自定义 rake 任务,它创建一个包含各种情况的数据的开发数据库。核心是这样的:
namespace :db do
task setup_seed: :environment do
Rake::Task['db:drop'].invoke
Rake::Task['db:create'].invoke
Rake::Task['db:schema:load'].invoke
Rake::Task['db:migrate'].invoke
Rake::Task['db:test:prepare'].invoke
Rake::Task['db:seed'].invoke
end
end
一切运行良好,直到调用db:seed,因为它抛出表不存在的错误。这是我的seed.rb:
puts Rails.env
# => development
puts Article.count
# rake aborted!
# Mysql2::Error: Table 'app_test.articles' doesn't exist: SHOW FULL FIELDS FROM `articles`
# /usr/src/app/db/seeds.rb:2:in `<top (required)>'
# /usr/src/app/Rakefile:16:in `block (2 levels) in <top (required)>'
# Tasks: TOP => db:seed
我注意到这里有两件奇怪的事情:
- 首先它没有找到表
articles(或任何表)。当我在种子文件的开头停止并查看数据库(开发)时,表存在,但测试数据库为空 - 我打印了
Rails.env,它返回development。但是,失败消息指出它尝试加载 DBapp_test.articles而不是app_development.articles。
所以我认为这两个问题是相关的。
【问题讨论】:
-
您应该省略
db:migrate任务,因为架构已经加载。同时添加您当前的 Rails 版本,db:test:prepare现已弃用。 -
Rails 版本是 3.2.9。当我删除
db:migrate任务时,会发生同样的错误
标签: mysql ruby-on-rails ruby rake rake-task