当我运行'rake db:migrate'时,自定义rake任务正在运行。我如何防止这种情况?

问题描述:

我在ubuntu 12.04上运行rails。当我运行下面的代码时,我的一个自定义任务发生错误。问题是我不希望我的自定义任务首先运行。只是数据库迁移。当我运行'rake db:migrate'时,自定义rake任务正在运行。我如何防止这种情况?

rake db:migrate --trace 

rake aborted! 
cannot load such file -- CSV 
/home/js/.rvm/gems/ruby-1.9.3-p194/gems/activesupport-3.2.6/lib/active_support/dependencies.rb:251:in `require' 
/home/js/.rvm/gems/ruby-1.9.3-p194/gems/activesupport-3.2.6/lib/active_support/dependencies.rb:251:in `block in require' 
/home/js/.rvm/gems/ruby-1.9.3-p194/gems/activesupport-3.2.6/lib/active_support/dependencies.rb:236:in `load_dependency' 
/home/js/.rvm/gems/ruby-1.9.3-p194/gems/activesupport-3.2.6/lib/active_support/dependencies.rb:251:in `require' 
/var/www/myapp/lib/tasks/import_inventory.rake:1:in `<top (required)>' 
/home/js/.rvm/gems/ruby-1.9.3-p194/gems/activesupport-3.2.6/lib/active_support/dependencies.rb:245:in `load' 
/home/js/.rvm/gems/ruby-1.9.3-p194/gems/activesupport-3.2.6/lib/active_support/dependencies.rb:245:in `block in load' 
/home/js/.rvm/gems/ruby-1.9.3-p194/gems/activesupport-3.2.6/lib/active_support/dependencies.rb:236:in `load_dependency' 
/home/js/.rvm/gems/ruby-1.9.3-p194/gems/activesupport-3.2.6/lib/active_support/dependencies.rb:245:in `load' 
/home/js/.rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.6/lib/rails/engine.rb:425:in `block in load_tasks' 
/home/js/.rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.6/lib/rails/engine.rb:425:in `each' 
/home/js/.rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.6/lib/rails/engine.rb:425:in `load_tasks' 
/home/js/.rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.6/lib/rails/application.rb:145:in `load_tasks' 
/home/js/.rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.6/lib/rails/railtie/configurable.rb:30:in `method_missing' 
/var/www/myapp/Rakefile:7:in `<top (required)>' 
/home/js/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/rake_module.rb:25:in `load' 
/home/js/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/rake_module.rb:25:in `load_rakefile' 
/home/js/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/application.rb:501:in `raw_load_rakefile' 
/home/js/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/application.rb:82:in `block in load_rakefile' 
/home/js/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling' 
/home/js/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/application.rb:81:in `load_rakefile' 
/home/js/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/application.rb:65:in `block in run' 
/home/js/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling' 
/home/js/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/application.rb:63:in `run' 
/home/js/.rvm/gems/[email protected]/gems/rake-0.9.2.2/bin/rake:33:in `<top (required)>' 
/home/js/.rvm/gems/[email protected]/bin/rake:19:in `load' 
/home/js/.rvm/gems/[email protected]/bin/rake:19:in `<main>' 
/home/js/.rvm/gems/ruby-1.9.3-p194/bin/ruby_noexec_wrapper:14:in `eval' 
/home/js/.rvm/gems/ruby-1.9.3-p194/bin/ruby_noexec_wrapper:14:in `<main>' 

Rake任务是跑:

require 'CSV' 

namespace :db do 
    desc 'Prepare transition database.' 
    task :import_inventory => :environment do 
    desc 'Import Assets Table' 

    file_path = "/Users/js/data/TSI/inventory.csv" 

    CSV.foreach(file_path, :headers => true) do |row| 
     asset = Asset.new 
     asset.asid_tag = row[0] 
     asset.description = row[1] 
     asset.qty = row[2] 
     asset.manufactuer = row[3] 
     asset.model = row[4] 
     asset.save 
    end 
    end 
end 

当你运行rake所有任务文件(LIB /任务/ * RB)被加载并耙之前分析可以确定哪些任务是可用的。这意味着,无论您是否调用导入任务,文件import_inventory.rake都会在您请求的实际任务(db:migrate)运行之前由ruby进行分析。结果require 'CSV'被执行,无论你真的想要运行什么任务。

至于修复,我猜它应该是require 'csv'(小写),而不是require 'CSV'(大写)?

+0

将其更改为小写修正了它。我猜OSX不在乎它是否小写,但是Ubuntu可以。谢谢。 – 2012-08-15 11:40:27