Неправильный путь ruby, используемый в задаче rake, выполняемой как cron - PullRequest
1 голос
/ 13 декабря 2010

Я пытаюсь использовать всякий раз, когда гем, чтобы выполнить несколько задач рейка.Похоже, что задачи cron настроены правильно - информация здесь из полученного почтового вывода.Вот пример выполненной команды:

/bin/bash -l -c 'cd /path/to/deployed/app && RAILS_ENV=production

rake clean: my: task --silent '

А вот некоторые переменные окружения:

X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <PATH=/usr/bin:/bin>

И вот следующая ошибка:

/bin/bash: /usr/bin/rake: /usr/bin/ruby: bad interpreter: No such file or directory

Когда я вошел в систему, я могу запускать эти грабли из одного каталога, но когда я запускаю

which ruby

, я получаю

/usr/local/bin/ruby

Кажется, что в / usr / bin есть «грабли», но запуск

/usr/bin/rake -T

выдает мне ту же ошибку:

-bash: /usr/bin/rake: /usr/bin/ruby: bad interpreter: No such file or directory

Каков будет лучший способ решить эту проблему?

Ответы [ 4 ]

5 голосов
/ 14 декабря 2010

На вашем пути находится / usr / local / bin /?Когда вы запускаете какой ruby, вы получаете / usr / local / bin / ruby, но когда вы запускаете rake, он ищет / usr / bin / ruby ​​

Или вы можете просто использовать символическую ссылку ruby, например:

sudoln -s / usr / local / bin / ruby ​​/usr/bin/.

1 голос
/ 16 декабря 2010

Вот что я сейчас использую:

every 1.day, :at => '5am' do
  # It appears that, when the following tasks are executed through
  #  cron, /usr/local/bin is not in the path (which is the ruby/RoR installation that should be used)
  #  So we need to make sure that the proper ruby/RoR installation can be found
  #  (Unfortunately this seems to restrict us to using the 'command' option, and leaves us unable
  #  to use the other options: 'runner' and 'rake' because i'm not sure how you'd affect the PATH
  #  environment variable for those)

  # (alot of what's below is just meant to provide a bit of visibility to the execution within cron)
  cmd_root = "PATH=/usr/local/bin:$PATH"
  cmd_root = cmd_root + " && "
  cmd_root = cmd_root + "export PATH"
  cmd_root = cmd_root + " && "
  cmd_root = cmd_root + "cd #{path}"
  cmd_root = cmd_root + " && "
  cmd_root = cmd_root + "pwd "
  cmd_root = cmd_root + " && "
  cmd_root = cmd_root + "echo $PATH"
  cmd_root = cmd_root + " && "
  cmd_root = cmd_root + "echo $RAILS_ENV"
  cmd_root = cmd_root + " && "
  cmd_root = cmd_root + "which ruby"

  # Execute the rake task, using 'command'
  cmd = cmd_root + " && rake clean:my:task param=val"
  command cmd

  # Without another way of manipulating the environment PATH, this isn't working right:
  #rake "clean:my:task"
end

Так как я просто использую опцию 'command', она позволяет мне выполнять команды перед фактической задачей rake, например, добавляя правильный каталогв ПУТЬ, так что используется правильный рубин.

Я не в восторге от того, как это жестко кодирует ссылку на / usr / local / bin, tho: - /.И я не знаю, как я мог бы использовать опции «рейк» или «бегун» в любом случае.Но, похоже, работает.

0 голосов
/ 26 октября 2015

Добавьте нижеприведенную строку кода в config / schedule.rb , чтобы установить правильный путь ruby.

 env :PATH, ENV['PATH']

, а затем выполните команды ниже

whenever --update-crontab     #   to update crontab
service crond restart         #   to restart crontab
0 голосов
/ 03 января 2012

У меня был конфликт с версиями граблей ... Я установил его сначала с помощью apt-get, а затем с gem ... поэтому я удалил каждую версию ... Мне даже пришлось удалить / usr / local / bin / rakeвручную.Переустановил только с gem и теперь он работает :) Надеюсь, он кому-нибудь поможет.

...