Cron Job Errors help - Ошибки Rails Runner - PullRequest
2 голосов
/ 23 мая 2011
* * * * * /bin/bash -l -c 'cd /Users/boris/projects/MyApp/ && rails runner "Resque.enqueue(Place)"'

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

  1. Загрузить Ruby с помощью RVM
  2. Перейти к MyApp Dir
  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

Ответы [ 3 ]

4 голосов
/ 03 апреля 2012

На самом деле лучший способ сделать это - использовать обертку 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 минуты.Этот пример основан на рельсах 3 и производственной среде.

1 голос
/ 29 мая 2011

Вам нужно создать правильную среду через 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)"'
0 голосов
/ 29 мая 2011

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

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

Bundle bug

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

...