我有以下任务:
namespace :db do
desc "Drop, create, migrate, seed the database and prepare the test database for rspec"
task :reset_db => :environment do
puts "Environment Check: Rails Environment = #{Rails.env}"
Rake::Task['db:drop'].invoke
Rake::Task['db:create'].invoke
Rake::Task['db:migrate'].invoke
#Rake::Task['db:fixtures:load'].invoke
Rake::Task['db:test:prepare'].invoke
puts 'Seeding Database..'
Rake::Task['db:seed'].invoke
end
end直到最后一行db:seed,这个任务才能正常工作。
它似乎正在使用test环境并在那里创建数据,而所有其他任务都在development环境中执行。当我通过命令行执行rake db:seed时,它可以在development环境中正常运行。
如何阻止它在test环境中运行?
发布于 2012-01-15 10:57:27
db:test:prepare rake任务准备测试数据库,因此设置RAILS_ENV=test。
因此,您的任务之所以在测试环境中运行,是因为db:test:prepare实际上会覆盖您的RAILS_ENV变量。
发布于 2012-12-14 19:08:18
重新定义您的种子任务,如下所示:
namespace :db do
task :seed => :environment do
env_seed_file = File.join(Rails.root, 'db', 'seeds', "#{Rails.env}.rb")
load(env_seed_file) if File.exist?(env_seed_file)
end
end现在您可以这样做了(特定于环境的文件在常规种子文件之后加载):
db
+-- seeds
| +-- development.rb
| +-- production.rb
| +-- staging.rb
+-- seeds.rb图片来源:codeofficer.com
https://stackoverflow.com/questions/8866760
复制相似问题