2010-11-15 3 views
0

Я написал задачу рейка, чтобы выполнить несколько других задач рейка через систему (чтобы привязать ActiveRecord к различным базам данных, среди другие вещи). Он отлично работает на моем ящике OS X, но не работает на наших продуктовых Linux-боксах с ошибкой загрузки. Задачи тривиально сводятся к:Задача рейка, выполняющая другие задачи рейка через систему, не работает - нет такого файла для загрузки «rake»

namespace :jobs do 

    task :foo => :environment do 
    system "rake jobs:bar" 
    end 

    task :bar => :environment do 
    puts "foobar" 
    end 

и прослежен выход:

-bash-3.2$ rake jobs:foo --trace 
(in /the/path) 
** Invoke jobs:foo (first_time) 
** Invoke environment (first_time) 
** Execute environment 
** Erubis 2.6.6 
** Execute jobs:foo 
/usr/bin/rake:19:in `load': no such file to load -- rake (LoadError) 
    from /usr/bin/rake:19 

Я сбросил вложится: в/USR/BIN/грабли и обнаружили кое-что интересное. Основная задача имеет путь нагрузки, содержащий оба эти пути:

/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/bin 
/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib 

в то время как вторичная работа имеет путь нагрузки, содержащий только:

/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib 

который, вероятно, объясняет ошибку нагрузки, но не причину Это. Есть идеи?

ответ

0

Убедитесь, что ваша установка правильно установила требуемые переменные среды. http://docs.rubygems.org/read/chapter/3 Такая же проблема возникла для меня при использовании «export RUBYOPT = RUBYGEM» вместо «export RUBYOPT = RUBYGEMS». Ах, разница, которую может сделать один персонаж.

+0

Спасибо за предложение, но, к сожалению, это не похоже на это. Сам исполняемый файл rake требует бит «rubygems», а loadpath подтверждает, что rubygems выполняет свою работу, немного по-разному в двух контекстах. Я почти уверен, что вы правы, чтобы предположить, что это среда, хотя, но я не могу для жизни понять, какие из них являются проблемой. –

0

Если вы действительно пытаетесь вызвать задачу рейка из другой задачи рейка. Почему бы не сделать это? "Rake :: Task. [ 'Работы: бар'] вызов". Вы даже можете сделать это в цикле, например, Array #, каждый из которых изменяет VAR-файлы ENV и т. Д. Я уже делал это в задачах раньше.

Хотя, если ваш пример был изобретен, и вы на самом деле не вызывали одну задачу, а просто спрашивали, почему у суб-оболочки есть разные настройки PATH, чего я не знаю. Возможно, если это сложно, то это намек на то, что это должно быть сделано по-другому.

+0

Потому что мне нужно привязать ActiveRecord :: Base к другой базе данных, конечно, и вы сами сказали мне, чтобы я не использовал connection_connection, чтобы делать это явно, и просто изменение ENV vars не меняет этого, и не будет переделать никакой другой ENV var конкретные инициализации. –

Смежные вопросы