【问题标题】:Custom rake tasks are running when I run 'rake db:migrate'. How do I prevent this?当我运行“rake db:migrate”时,自定义 rake 任务正在运行。我该如何防止这种情况?
【发布时间】:2012-08-14 12:10:15
【问题描述】:

我在 ubuntu 12.04 上运行 rails。当我运行下面的代码时,我的一项自定义任务出现错误。问题是我不希望我的自定义任务首先运行。只是数据库迁移。

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/ruby-1.9.3-p194@global/gems/rake-0.9.2.2/lib/rake/rake_module.rb:25:in `load'
/home/js/.rvm/gems/ruby-1.9.3-p194@global/gems/rake-0.9.2.2/lib/rake/rake_module.rb:25:in `load_rakefile'
/home/js/.rvm/gems/ruby-1.9.3-p194@global/gems/rake-0.9.2.2/lib/rake/application.rb:501:in `raw_load_rakefile'
/home/js/.rvm/gems/ruby-1.9.3-p194@global/gems/rake-0.9.2.2/lib/rake/application.rb:82:in `block in load_rakefile'
/home/js/.rvm/gems/ruby-1.9.3-p194@global/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling'
/home/js/.rvm/gems/ruby-1.9.3-p194@global/gems/rake-0.9.2.2/lib/rake/application.rb:81:in `load_rakefile'
/home/js/.rvm/gems/ruby-1.9.3-p194@global/gems/rake-0.9.2.2/lib/rake/application.rb:65:in `block in run'
/home/js/.rvm/gems/ruby-1.9.3-p194@global/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling'
/home/js/.rvm/gems/ruby-1.9.3-p194@global/gems/rake-0.9.2.2/lib/rake/application.rb:63:in `run'
/home/js/.rvm/gems/ruby-1.9.3-p194@global/gems/rake-0.9.2.2/bin/rake:33:in `<top (required)>'
/home/js/.rvm/gems/ruby-1.9.3-p194@global/bin/rake:19:in `load'
/home/js/.rvm/gems/ruby-1.9.3-p194@global/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

【问题讨论】:

    标签: ruby-on-rails-3 rake ubuntu-12.04 rake-task


    【解决方案1】:

    当您运行 Rake 时,所有任务文件 (lib/tasks/*.rb) 都会在 rake 确定哪些任务可用之前被加载和解析。这意味着,无论您是否调用导入任务,文件import_inventory.rake 都会在您请求的实际任务(db:migrate)运行之前被ruby 解析。结果require 'CSV' 被执行,无论您真正尝试运行什么任务。

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

    【讨论】:

    • 将其更改为小写确实可以解决问题。我猜 OSX 不在乎它是否是小写字母,但 Ubuntu 会。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2014-03-21
    • 2011-07-14
    • 2012-11-08
    • 1970-01-01
    • 1970-01-01
    • 2020-01-03
    • 1970-01-01
    • 2012-05-30
    相关资源
    最近更新 更多