Пользовательская задача Capistrano не выполняется, потому что "Rails требует RubyGems> = 1.3.2" - PullRequest
1 голос
/ 27 ноября 2009

Моя пользовательская задача capistrano "app: sample" завершается с таким сообщением об ошибке:

mnylen ilmo-on-rails $ cap app:sample
* executing `app:sample'
* executing "export RAILS_ENV=production; cd /home/mnylen/ilmo-on-rails/current; ruby script/coursegen 10"
servers: ["rails.cs.helsinki.fi"]
* establishing connection to gateway `melkinpaasi.cs.helsinki.fi'
* Creating gateway using melkinpaasi.cs.helsinki.fi
* establishing connection to `rails.cs.helsinki.fi' via gateway
Password: 
[rails.cs.helsinki.fi] executing command
*** [err :: rails.cs.helsinki.fi] Rails requires RubyGems >= 1.3.2. Please install RubyGems and try again: http://rubygems.rubyforge.org
command finished
failed: "sh -c 'export RAILS_ENV=production; cd /home/mnylen/ilmo-on-rails/current; ruby script/coursegen 10'" on rails.cs.helsinki.fi

Я что-то упускаю или делаю что-то не так? Задача:

namespace :app do
  desc "Run sample data on production2
  task :sample do
    run "export RAILS_ENV=production; cd #{current_path}; ruby script/coursegen 10"
  end
end

Если я запускаю ту же команду с реального сервера, она работает нормально.

Ответы [ 3 ]

1 голос
/ 27 ноября 2009

Cap запускает удаленную команду как непредвиденный пользователь - и у этого пользователя нет правильного пути к ruby ​​и gem. Проверьте свои настройки в рецепте для :user и :use_sudo. Внимательно прочитайте вывод шапки, чтобы увидеть, к какому пользователю подключается. Я вижу, вы используете :gateway; в этом случае может быть два пользователя. Один для подключения к шлюзу, а другой для фактического запуска команд на целевом сервере.

1 голос
/ 27 ноября 2009

Хорошо, решено.

Проблема заключалась в том, что на рабочем сервере было две установки Ruby.

Файл .profile в моем домашнем каталоге на рабочем сервере устанавливает переменную среды PATH для указания правильной версии Ruby.

Кажется, команда

run не является источником файла .profile и, следовательно, при запуске ruby ​​script / coursegen 10 в задании использовалась неправильная Версия Ruby, которая стала причиной странного сообщения об ошибке в версии RubyGems. Это также объясняет, почему это работало при ручном запуске команды из оболочки производственных серверов.

Моим решением было использование полного пути к исполняемому файлу Ruby в моей задаче запуска, например:

run "export RAILS_ENV=production; cd #{current_path}; /opt/ruby-enterprise-1.8.7-2009.10/bin/ruby script/coursegen 10"

Конечно, это не красиво, но работает. Если у кого-то есть более красивые решения, я буду более чем рад использовать их. :)

0 голосов
/ 27 ноября 2009

Похоже, вам следует обновить RubyGems на удаленном сервере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...