Whenever: Capistrano/Bundler/Vendored Whenever - "Uninitialized Constant Whenever::JobList::Rails"

Created on 31 May 2011  ·  7Comments  ·  Source: javan/whenever

I have seen similar errors to this marked as resolved in the current version, so I thought I would post as I am using the current version and am still seeing issues with this

 * executing `whenever:update_crontab'
 * executing "cd /home/my_user/my.server.com/apps/my_rails_app/current && bundle exec whenever --update-crontab my_rails_app --set environment=staging"
   servers: ["my.server.com"]
   [my.server.com] executing command
** [out :: my.server.com] /home/my_user/my.server.com/apps/my_rails_app/shared/bundle/ruby/1.8/gems/whenever-0.6.8/lib/whenever/job_list.rb:21:in `initialize': (eval):48:in `initialize': uninitialized constant Whenever::JobList::Rails (NameError)
** [out :: my.server.com] from /home/my_user/my.server.com/apps/my_rails_app/shared/bundle/ruby/1.8/gems/whenever-0.6.8/lib/whenever.rb:15:in `eval'
** [out :: my.server.com] from /home/my_user/my.server.com/apps/my_rails_app/shared/bundle/ruby/1.8/gems/whenever-0.6.8/lib/whenever/job_list.rb:21:in `initialize'
** [out :: my.server.com] from /home/my_user/my.server.com/apps/my_rails_app/shared/bundle/ruby/1.8/gems/whenever-0.6.8/lib/whenever.rb:15:in `new'
** [out :: my.server.com] from /home/my_user/my.server.com/apps/my_rails_app/shared/bundle/ruby/1.8/gems/whenever-0.6.8/lib/whenever.rb:15:in `cron'
** [out :: my.server.com] from /home/my_user/my.server.com/apps/my_rails_app/shared/bundle/ruby/1.8/gems/whenever-0.6.8/lib/whenever/command_line.rb:56:in `whenever_cron'
** [out :: my.server.com] from /home/my_user/my.server.com/apps/my_rails_app/shared/bundle/ruby/1.8/gems/whenever-0.6.8/lib/whenever/command_line.rb:106:in `updated_crontab'
** [out :: my.server.com] from /home/my_user/my.server.com/apps/my_rails_app/shared/bundle/ruby/1.8/gems/whenever-0.6.8/lib/whenever/command_line.rb:37:in `run'
** [out :: my.server.com] from /home/my_user/my.server.com/apps/my_rails_app/shared/bundle/ruby/1.8/gems/whenever-0.6.8/lib/whenever/command_line.rb:8:in `execute'
** [out :: my.server.com] from /home/my_user/my.server.com/apps/my_rails_app/shared/bundle/ruby/1.8/gems/whenever-0.6.8/bin/whenever:38
** [out :: my.server.com] from /home/my_user/my.server.com/apps/my_rails_app/shared/bundle/ruby/1.8/bin/whenever:19:in `load'
** [out :: my.server.com] from /home/my_user/my.server.com/apps/my_rails_app/shared/bundle/ruby/1.8/bin/whenever:19

My versions:

$ which gem
/home/my_user/.rvm/rubies/ruby-1.9.2-p180/bin/gem
$ gem -v
1.6.2
$ which bundle
/home/my_user/.rvm/gems/ruby-1.9.2-p180@my_rails_app/bin/bundle
$ bundle -v
Bundler version 1.0.14
$ which whenever
/home/my_user/.rvm/gems/ruby-1.9.2-p180@my_rails_app/bin/whenever
$ whenever -v
Whenever v0.6.8

Deploy.rb

set :whenever_command, "bundle exec whenever"
set :whenever_environment, defer { stage }
require "whenever/capistrano"

Am I doing something wrong or is this a bug with Whenever?

Most helpful comment

Thanks! Ended up doing this as the completed line in case anyone else is looking for the same:

set :output, File.join(Whenever.path, "log", "cron.log")

All 7 comments

Does your schedule.rb file call a method on Rails? Keep in mind whenever doesn't load your Rails env.

Yes :) I am trying to make certain cron tasks only run in certain environments, so I place chunks of code in "if Rails.env == 'staging'" etc…

Is there a supported way of doing this :)

Since you're --set environment=staging you can can use the environment variable in your schedule.rb: if environment == 'staging'

worked great. Thanks for the lightspeed support.

Similarly, how can I do the same in schedule.rb without referencing the Rails object?

set :output, Rails.root.join('log', 'cron.log')

Edit: I should mention that I don't even know what the default value is since it doesn't seem to be mentioned anywhere...perhaps I don't even need to specify an :output value.

You can use Whenever.path to determine the root directory.

Thanks! Ended up doing this as the completed line in case anyone else is looking for the same:

set :output, File.join(Whenever.path, "log", "cron.log")
Was this page helpful?
0 / 5 - 0 ratings

Related issues

kovalevsky picture kovalevsky  ·  5Comments

chronodm picture chronodm  ·  7Comments

ringe picture ringe  ·  13Comments

zsherman picture zsherman  ·  17Comments

tonytonyjan picture tonytonyjan  ·  21Comments