相关疑难解决方法(0)

覆盖rails的默认rake任务

我有一个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 任务.

任何人都可以看到我如何解决这个问题?我宁愿覆盖它而不是使用新任务.谢谢,最多

rake ruby-on-rails

71
推荐指数
3
解决办法
2万
查看次数

如何在rake任务中强制执行RAILS_ENV?

我有这个小耙任务:

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.如何使此任务按预期工作

ruby rake ruby-on-rails

45
推荐指数
4
解决办法
4万
查看次数

Rails:让这个rake任务知道它在测试环境中

我在我的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任务,以便当它播种测试数据库时它知道它正在为测试数据库播种?

environment rake ruby-on-rails seed ruby-on-rails-3

16
推荐指数
2
解决办法
1万
查看次数

rake db:迁移不适用于travis-ci构建

我正试图在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)

ruby rake ruby-on-rails github travis-ci

13
推荐指数
2
解决办法
8856
查看次数