Как отметил Джон Бачир, вы можете сделать это через env
.Но позвольте мне добавить больше информации.Я размещаю на AWS Opsworks.К сожалению, у них по умолчанию не установлен менеджер ruby (RVM, Rbenv и т. Д.).
Первое, что мне нужно было сделать, - это подключить SSH к экземпляру и выяснить, какой ruby я использовал.Это было достаточно просто, выполнив команду which ruby
в терминале.
$ which ruby
/usr/local/bin/ruby
Крон использовал ruby, расположенный в /usr/bin/ruby
.Это необходимо изменить.
В schedule.rb у меня есть:
set :env_path, ''
env :PATH, @env_path if @env_path.present?
В локальном режиме env_path
устанавливать не нужно.Для большинства пользователей единственное, что нужно сделать, это выполнить всякий раз, когда это так:
bundle exec whenever --set 'environment=development' --update-crontab
В промежуточной / производственной среде ruby может быть установлен в другом месте.Таким образом, выполнение этого может быть более подходящим:
bundle exec whenever --set 'environment=staging&env_path=/usr/bin/local' --update-crontab
Вам нужно будет заменить /usr/bin/local
на вывод echo $PATH
.
В Opsworks, однако мне нужно было создать пользовательскийРецепт от шеф-повара, который выглядел так:
node[:deploy].each do |application, deploy|
execute 'whenever' do
user 'deploy'
group 'nginx'
cwd "#{deploy[:deploy_to]}/current"
command "bundle exec whenever --set 'environment=#{deploy[:environment_variables][:RAILS_ENV]}&env_path=#{ENV['PATH']}' --update-crontab"
end
end
Надеюсь, информация здесь достаточно ясна.