2013-06-03 43 views
0

我们有一个rake任务,在数据库系统之间运行一个复杂的转换。我们已经升级了这个任务,现在需要Nokogiri。它的安装:无法运行需要'nokogiri'的耙式任务

`gem list --local`: 

*** LOCAL GEMS *** 

... 
nokogiri (1.5.9) 
... 

Ruby是在1.8.x的版本,需要require 'rubygems'

`ruby -v` 
ruby 1.8.7 (2012-02-08 MBARI 8/0x8770 on patchlevel 358) [i686-linux], MBARI 0x8770, Ruby Enterprise Edition 2012.02 

随着IRB,一切似乎很动听:

`irb` 
irb(main):001:0> require 'rubygems' 
=> true 
irb(main):002:0> require 'nokogiri' 
=> true 
irb(main):003:0> 

但是,在开始rake任务,它似乎没有找到nokogiri:

lib/tasks$ RAILS_ENV="test" rake redmine::migrate_from_buggy_new.rake 280 --trace 
(in /var/www/redmine) 
rake aborted! 
no such file to load -- nokogiri 
/var/www/redmine/lib/tasks/migrate_from_buggy_new.rake:27:in `require' 
/var/www/redmine/lib/tasks/migrate_from_buggy_new.rake:27 
/usr/local/lib/ruby/gems/1.8/gems/railties-3.2.12/lib/rails/engine.rb:425:in `load' 
/usr/local/lib/ruby/gems/1.8/gems/railties-3.2.12/lib/rails/engine.rb:425:in `load_tasks' 
/usr/local/lib/ruby/gems/1.8/gems/railties-3.2.12/lib/rails/engine.rb:425:in `each' 
/usr/local/lib/ruby/gems/1.8/gems/railties-3.2.12/lib/rails/engine.rb:425:in `load_tasks' 
/usr/local/lib/ruby/gems/1.8/gems/railties-3.2.12/lib/rails/application.rb:145:in `load_tasks' 
/usr/local/lib/ruby/gems/1.8/gems/railties-3.2.12/lib/rails/railtie/configurable.rb:30:in `send' 
/usr/local/lib/ruby/gems/1.8/gems/railties-3.2.12/lib/rails/railtie/configurable.rb:30:in `method_missing' 
/var/www/redmine/Rakefile:7 
/usr/local/lib/ruby/gems/1.8/gems/rake-10.0.3/lib/rake/rake_module.rb:25:in `load' 
/usr/local/lib/ruby/gems/1.8/gems/rake-10.0.3/lib/rake/rake_module.rb:25:in `load_rakefile' 
/usr/local/lib/ruby/gems/1.8/gems/rake-10.0.3/lib/rake/application.rb:583:in `raw_load_rakefile' 
/usr/local/lib/ruby/gems/1.8/gems/rake-10.0.3/lib/rake/application.rb:89:in `load_rakefile' 
/usr/local/lib/ruby/gems/1.8/gems/rake-10.0.3/lib/rake/application.rb:160:in `standard_exception_handling' 
/usr/local/lib/ruby/gems/1.8/gems/rake-10.0.3/lib/rake/application.rb:88:in `load_rakefile' 
/usr/local/lib/ruby/gems/1.8/gems/rake-10.0.3/lib/rake/application.rb:72:in `run' 
/usr/local/lib/ruby/gems/1.8/gems/rake-10.0.3/lib/rake/application.rb:160:in `standard_exception_handling' 
/usr/local/lib/ruby/gems/1.8/gems/rake-10.0.3/lib/rake/application.rb:70:in `run' 
/usr/local/lib/ruby/gems/1.8/gems/rake-10.0.3/bin/rake:33 
/usr/local/bin/rake:19:in `load' 
/usr/local/bin/rake:19 

我不确定接下来该做什么,我在Ruby环境中很新鲜,而且一切都还是陌生而新鲜的。

编辑:耙文件的开头是这样的:

require 'active_record' 
require 'action_controller' 
require 'iconv' 
require 'pp' 

require 'rubygems' 
require 'nokogiri' 

namespace :redmine do 
    desc 'Buggy migration script' 
    task :migrate_from_buggy => :environment do 

编辑2:引入nokogiri安装到/usr/local/lib/ruby/gems/1.8/gems/nokogiri-1.5.9/lib/nokogiri。我试图将其包含到搜索路径中,如下所示:

RAILS_ENV="test" rake redmine::migrate_from_buggy_new.rake 280 -I "/usr/local/lib/ruby/gems/1.8/gems/" 
RAILS_ENV="test" rake redmine::migrate_from_buggy_new.rake 280 -I "/usr/local/lib/ruby/gems/1.8/gems/nokogiri-1.5.9" 
RAILS_ENV="test" rake redmine::migrate_from_buggy_new.rake 280 -I "/usr/local/lib/ruby/gems/1.8/gems/nokogiri-1.5.9/lib" 
RAILS_ENV="test" rake redmine::migrate_from_buggy_new.rake 280 -I "/usr/local/lib/ruby/gems/1.8/gems/nokogiri-1.5.9/lib/nokogiri" 

所有无效(同样的问题/错误消息)。

+0

耙子任务是什么样的?你需要“rubygems”吗? –

+0

用rake文件的开头更新了这个问题,但我并没有真正看到它的意义。 – 0xCAFEBABE

+0

如果您需要'需要'rubygems'',它必须发生在宝石需求清单的顶部,而不是中途。 Ruby 1.8.7是第一个不需要你需要红宝石的地方;尝试启动irb并输入'require'rubygems'',你应该看到一个'false'结果,意味着它已经被加载。这不会解决问题,但会消除一些混乱。 –

回答

1

建议:如果对您的环境完全可行,请考虑使用Bundler。它倾向于让很多这些噩梦般的宝石问题消失。

+0

使用Bundler后,一切正常。谢谢。 – 0xCAFEBABE