Хорошо, у меня недавно был некоторый опыт с этим. Похоже, есть несколько способов решения этой проблемы. Во-первых, вы можете определить, действительно ли удаленное выполнение (через Capistrano) связано с самим хостом. Похоже, вы сделали это с удаленной оболочкой Capistrano:
$ cap shell
> echo $PATH
Хорошо. Бьюсь об заклад, когда вы входите в систему и выводите туда «echo $ PATH», все получается правильно ... здесь тоже самое.
Я нашел два способа исправить это: Один - включить выполнение среды в демоне ssh удаленного хоста. Теоретически это сработало бы, но я не хотел спрашивать сисадмина, нормально ли это открывать. Вы в основном редактируете файлы конфигурации ssh, чтобы установить для 'PermitUserEnvironment' значение 'yes', и добавляете необходимые параметры среды в файл ~ / .ssh / environment пользователя развертывания - ваши справочные страницы для конкретной системы, вероятно, лучше, чем мои попытки обобщить .
Я выбрал то, что кажется довольно хакерским, и имеет недостаток, заключающийся в том, что он является глобальным для всех хостов, на которых вы развертываете приложение (поэтому, если ваши каталоги ruby / gems различны на разных хостах, это не сработает) - но : Я добавил настройки default_environment в скрипт config / deploy.rb:
set :default_environment, {
'PATH' => "/usr/local/bin:/bin:/usr/bin:/bin:/<ruby-dir>/bin",
'GEM_HOME' => '<ruby-dir>/lib/ruby/gems/1.8',
'GEM_PATH' => '<ruby-dir>lib/ruby/gems/1.8',
'BUNDLE_PATH' => '<ruby-dir>/lib/ruby/gems/1.8/gems'
}
AMMENDED: It isn't so 'hackish' if you consider the following:
- The environment-specific deploy scripts (deploy/foo.rb) can
override the default in deploy.rb
- PermitUserEnvironment hides the configuration deep in the
.ssh directory of the deploy user; :default_environment at
least exposes it in the checked-in sources.
Это также решает проблему невозможности выполнения задач удаленного рейка и т. Д. Через Capistrano. Имейте в виду, что гем Capistrano, по крайней мере, версия, которая у меня есть, и с моим развертыванием, настроенным «стандартным» способом, установят гемы в / shared / bundle
каталог, который выбирается приложением. Описанный мной метод требует минимального подмножества гемов в системных каталогах, на которые ссылается среда по умолчанию, чтобы удаленные команды Capistrano могли выполнять связку, грабли и т. Д.
Вы не сказали, используете ли вы RVM (мое решение этого не делает); однако это решение очень близко к одному из рекомендуемых RVM-решений. С другой стороны, вы можете просто использовать решение 'rvm / capistrano'; ищите Интеграция RVM Capistrano на веб-сайте RVM для получения более подробной информации.