Cron Job Errors help - Ошибки Rails Runner

* * * * * /bin/bash -l -c 'cd /Users/boris/projects/MyApp/ && rails runner "Resque.enqueue(Place)"'

В основном мне нужно сделать следующее:

  1. Загрузить Ruby с помощью RVM
  2. Перейдите в MyApp каталог
  3. Запустите следующую строку: rails runner "Resque.enqueue(Place)

Приведенный выше cron, кажется, работает, но выдает следующие ошибки с rails runner что происходит на?

/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rubygems/dependency.rb:52:in `initialize': Valid types are [:development, :runtime], not nil (ArgumentError)
    from /Users/boris/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/resolver.rb:359:in `new'
    from /Users/boris/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/resolver.rb:359:in `search'
    from /Users/boris/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/resolver.rb:354:in `gems_size'
    from /Users/boris/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/resolver.rb:179:in `resolve'
    from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rubygems/source_index.rb:95:in `sort_by'
    from /Users/boris/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/resolver.rb:175:in `each'
    from /Users/boris/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/resolver.rb:175:in `sort_by'
    from /Users/boris/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/resolver.rb:175:in `resolve'
    from /Users/boris/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/resolver.rb:160:in `start'
    from /Users/boris/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/resolver.rb:128:in `resolve'
    from /Users/boris/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/resolver.rb:127:in `catch'
    from /Users/boris/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/resolver.rb:127:in `resolve'
    from /Users/boris/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/definition.rb:151:in `resolve'
    from /Users/boris/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/definition.rb:90:in `specs'
    from /Users/boris/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/definition.rb:135:in `specs_for'
    from /Users/boris/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/definition.rb:124:in `requested_specs'
    from /Users/boris/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/environment.rb:23:in `requested_specs'
    from /Users/boris/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/runtime.rb:11:in `setup'
    from /Users/boris/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler.rb:107:in `setup'
    from /Users/boris/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/setup.rb:6
    from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require'
    from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rubygems/custom_require.rb:36:in `require'
    from /Users/boris/projects/chaggregator/config/boot.rb:6
    from script/rails:5:in `require'
    from script/rails:5

person JZ.    schedule 23.05.2011    source источник


Ответы (3)


На самом деле лучший способ сделать это — использовать обертку rvm. Вы можете создать обертку следующим образом:

rvm wrapper ruby-1.9.3-p0@somegemset appname rails 

двоичный файл может быть rails, rake, gem или любым другим двоичным файлом ruby, который вы установили. Что происходит, так это то, что rvm создает оболочку, которая будет источником правильной среды rvm перед выполнением команды rails. В общесистемном rvm оболочка обычно помещается в /usr/local/rvm/bin/

Теперь из cron вы можете просто сделать:

*/3 * * * * cd /path/to/your/app && appname_rails runner "Resque.enqueue(Place)" -e production

Это приведет к переходу в каталог вашего приложения и запуску оболочки rvm, которую вы только что создали, каждые 3 минуты. Этот пример основан на rails 3 и рабочей среде.

person pixeltom    schedule 03.04.2012

Вам нужно получить правильную среду через RVM, прежде чем любой код Ruby запустится. Поэтому включите что-то вроде этого в команду:

source /usr/local/rvm/environments/ruby-1.9.2-p180@my-gemset

Таким образом, потенциальное решение может быть таким:

SHELL=/bin/bash
* * * * * source /{path_to_rvm_environment_for_ruby}@{gemset} && cd /Users/boris/projects/MyApp/ && rails runner "Resque.enqueue(Place)"'
person Jits    schedule 28.05.2011

Здесь много движущихся частей, вот несколько указателей на то, что нужно проверить в вашей среде (ruby, rvm, bundle) — опубликуйте свои выводы и начните с этого.

Проблема пути с упаковщиком, менять или не менять?

Ошибка пакета

Я предполагаю, что команды работают нормально вне cron? если вы запускаете задание cron от имени другого пользователя, проверьте среду этого пользователя.

person yacc    schedule 28.05.2011