1

I followed this issue https://github.com/javan/whenever/issues/714 and set my schedule.rb like this.

env :PATH, ENV['PATH']
set :output, {:error => '~/Desktop/z.error.log', :standard => '~/Desktop/z.standard.log'}

every 1.minute do
  runner 'Price.create'
end

Then I check my crontab -l, it showed the following command

PATH=/Users/MyUserName/.rvm/gems/ruby-2.3.3@rails514/bin:/Users/MyUserName/.rvm/gems/ruby-2.3.3@global/bin:/Users/MyUserName/.rvm/rubies/ruby-2.3.3/bin:/Users/MyUserName/.rvm/bin:/usr/local/opt/mysql@5.6/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/TeX/texbin

* * * * * /bin/bash -l -c 'cd /Users/MyUserName/Desktop/my-project && bundle exec bin/rails runner -e production '\''Price.create'\'' >> ~/Desktop/z.standard.log 2>> ~/Desktop/z.error.log'

# End Whenever generated tasks for: /Users/MyUserName/Desktop/my-project/config/schedule.rb at: 2018-01-30 02:13:32 +0800

It seems great and executable, however, I checked the error log and found the following errors.

bundler: failed to load command: bin/rails (bin/rails)

Bundler::GemNotFound: Could not find erubi-1.7.0 in any of the sources
  /Users/MyUserName/.rvm/gems/ruby-2.3.3@rails4271/gems/bundler-1.16.1/lib/bundler/spec_set.rb:88:in `block in materialize'
  /Users/MyUserName/.rvm/gems/ruby-2.3.3@rails4271/gems/bundler-1.16.1/lib/bundler/spec_set.rb:82:in `map!'
  /Users/MyUserName/.rvm/gems/ruby-2.3.3@rails4271/gems/bundler-1.16.1/lib/bundler/spec_set.rb:82:in `materialize'
  /Users/MyUserName/.rvm/gems/ruby-2.3.3@rails4271/gems/bundler-1.16.1/lib/bundler/definition.rb:170:in `specs'
  /Users/MyUserName/.rvm/gems/ruby-2.3.3@rails4271/gems/bundler-1.16.1/lib/bundler/definition.rb:237:in `specs_for'
  /Users/MyUserName/.rvm/gems/ruby-2.3.3@rails4271/gems/bundler-1.16.1/lib/bundler/definition.rb:226:in `requested_specs'
  /Users/MyUserName/.rvm/gems/ruby-2.3.3@rails4271/gems/bundler-1.16.1/lib/bundler/runtime.rb:108:in `block in definition_method'
  /Users/MyUserName/.rvm/gems/ruby-2.3.3@rails4271/gems/bundler-1.16.1/lib/bundler/runtime.rb:20:in `setup'
  /Users/MyUserName/.rvm/gems/ruby-2.3.3@rails4271/gems/bundler-1.16.1/lib/bundler.rb:107:in `setup'
  /Users/MyUserName/.rvm/gems/ruby-2.3.3@rails4271/gems/bundler-1.16.1/lib/bundler/setup.rb:20:in `<top (required)>'
  /Users/MyUserName/.rvm/rubies/ruby-2.3.3/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
  /Users/MyUserName/.rvm/rubies/ruby-2.3.3/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'

I felt a little bit confused and wondering why I could not load the right gem path.

Environment:

OSX: 10.13.2

Rails 5.1.4

Ruby 2.3.3

Update

I found out that the error message from log stated that

/Users/MyUserName/.rvm/gems/ruby-2.3.3@rails4271/gems/bundler-1.16.1/lib/bundler/spec_set.rb:88:in `block in materialize'`,

However, I check my crontab -l, it clearly showed this setting

#sm start rvm
PATH="/Users/MyUserName/.rvm/gems/ruby-2.3.3@rails514/bin:/Users/MyUserName/.rvm/gems/ruby-2.3.3@global/bin:/Users/MyUserName/.rvm/rubies/ruby-2.3.3/bin:/Users/MyUserName/.rvm/gems/ruby-2.3.3@rails514/bin:/Users/MyUserName/.rvm/gems/ruby-2.3.3@global/bin:/Users/MyUserName/.rvm/rubies/ruby-2.3.3/bin:/Users/MyUserName/.rvm/bin:/usr/local/opt/mysql@5.6/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/TeX/texbin"
GEM_HOME='/Users/MyUserName/.rvm/gems/ruby-2.3.3@rails514'
GEM_PATH='/Users/MyUserName/.rvm/gems/ruby-2.3.3@rails514:/Users/MyUserName/.rvm/gems/ruby-2.3.3@global'
MY_RUBY_HOME='/Users/MyUserName/.rvm/rubies/ruby-2.3.3'
IRBRC='/Users/MyUserName/.rvm/rubies/ruby-2.3.3/.irbrc'
RUBY_VERSION='ruby-2.3.3'
#sm end rvm

I am confused why it still get the wrong rvm version. Did I miss something?

Update 2

After I changed the default gemset, it works perfectly.

I used this command

rvm use 2.3.3@rails514 --default

But does anyone can tell me how to put the right path in crontab instead of setting rvm default?

rj487
  • 4,476
  • 6
  • 47
  • 88
  • What happens if you type `cd /Users/MyUserName/Desktop/my-project && bundle exec bin/rails runner -e production '\''Price.create'\'' ` , which is what CRONTAB is running, at the command-line? Maybe that will help troubleshoot. – Kyle Heironimus Jan 29 '18 at 18:42
  • It works perfectly. – rj487 Jan 30 '18 at 14:04
  • I found that the error message states that `/Users/MyUserName/.rvm/gems/ruby-2.3.3@rails4271/gems/bundler-1.16.1/lib/bundler/spec_set.rb:88:in `block in materialize'`, and have updated my question! – rj487 Jan 30 '18 at 14:07
  • So the command works from the command line but not via crontab, so you need to do some rvm/crontab troubleshooting. Maybe https://rvm.io/deployment/cron or https://stackoverflow.com/questions/20954298/gem-not-found-in-ruby-cron-job-in-rvm-env will be some help. – Kyle Heironimus Jan 30 '18 at 15:37

1 Answers1

2

Try to run

rvm cron setup

Not sure if it fix the problem, but had a similar issue once, and worked for me. Good luck!

Ronan Lopes
  • 3,320
  • 4
  • 25
  • 51
  • It helps me add something like `PATH`, `GEM_HOME`, `GEM_PATH` in crontab, but it doesn't change anything. I still got the same errors message. – rj487 Jan 29 '18 at 18:29