我有一个Rails 2.2项目,我想在其中覆盖rake db:test:prepare任务的功能.我认为这会起作用,但它没有:
#lib/tasks/db.rake
namespace :db do
namespace :test do
desc "Overridden version of rails' standard db:test:prepare task since the schema dump used in that can't handle DB enums"
task :prepare => [:environment] do
puts "doing db:structure:dump"
Rake::Task['db:structure:dump'].invoke
puts "doing db:test:clone_structure"
Rake::Task['db:test:clone_structure'].invoke
end
end
end
Run Code Online (Sandbox Code Playgroud)
我得到了标准任务的行为.如果我将任务的名称更改为:prepare2然后执行rake db:test:prepare2,那么它可以正常工作.我从中得出的自然结论是,我的rake任务在内置的Rails 之前被定义,因此我的标准:prepare任务会覆盖我的rake 任务.
任何人都可以看到我如何解决这个问题?我宁愿覆盖它而不是使用新任务.谢谢,最多
我有这个小耙任务:
namespace :db do
namespace :test do
task :reset do
ENV['RAILS_ENV'] = "test"
Rake::Task['db:drop'].invoke
Rake::Task['db:create'].invoke
Rake::Task['db:migrate'].invoke
end
end
end
Run Code Online (Sandbox Code Playgroud)
现在,当我执行时,它将忽略我试图硬编码的RAILS_ENV.如何使此任务按预期工作
我在我的lib/tasks文件夹中定义了以下rake任务:
namespace :db do
namespace :test do
task :prepare => :environment do
Rake::Task["db:seed"].invoke
end
end
end
Run Code Online (Sandbox Code Playgroud)
现在,它的作用是在我运行时为测试数据库播种rake db:test:prepare.我这样做是因为我有一些必须存在的基本记录才能使应用程序正常运行,所以它们不是可选的,也不能真正被嘲笑.
另外,我有一个在开发和生产中使用S3进行资产存储的模型,但我不希望它使用S3进行测试.我在模型中设置了一个方法,用于将存储路径从S3更改为本地ifRails.env.test?
但是,这不起作用.我想知道rake任务是否知道它被调用的环境,事实证明它不是.我把它放在我的seeds.rb文件的顶部:
puts "Environment Check: Rails Environment = #{Rails.env}"
Run Code Online (Sandbox Code Playgroud)
果然,当任务运行时,这打印: Environment Check: Rails Environment = development
那么,我怎样才能重做这个rake任务,以便当它播种测试数据库时它知道它正在为测试数据库播种?
我正试图在Travis-CI上从github构建我的Ruby on Rails项目,但我遇到了迁移问题.它为迁移运行一个rake任务,但在此之后它抱怨了相同的迁移步骤.
它遵循我的.travis.yml文件:
language: ruby
rvm:
- 1.9.2
before_script:
- "rake db:migrate RAILS_ENV=test"
Run Code Online (Sandbox Code Playgroud)
这是构建输出:
1Using worker: ruby4.worker.travis-ci.org:travis-ruby-3
2
3
4
5$ cd ~/builds
6
7
8$ git clone --depth=100 --quiet git://github.com/rafaelportela/bacilo.git rafaelportela/bacilo
9
10
11
12$ cd rafaelportela/bacilo
13
14$ git checkout -qf 7553b7351b7a642e39ea7b55204de6cd4f320c36
15
16
17$ export TRAVIS_RUBY_VERSION=1.9.2
18
19$ rvm use 1.9.2
20Using /home/vagrant/.rvm/gems/ruby-1.9.2-p290
21
22$ ruby --version
23ruby 1.9.2p290 (2011-07-09 revision 32553) [i686-linux]
24
25$ gem --version
261.8.17
27
28
29$ export BUNDLE_GEMFILE=/home/vagrant/builds/rafaelportela/bacilo/Gemfile
30
31$ bundle …Run Code Online (Sandbox Code Playgroud)