« 船戸与一 死去 Main perl: NKF.pmモジュールを追加 »

rvmの環境でのRubyスクリプトのcron実行

Ruby-1.9.3のrvm環境だとcronにスクリプトを組み込んでも問題なく実行できていたのに、rvmで2.2.1に更新するとなぜかcron時にgemが見つからないとのエラーが出るようになってしまった…(↓):

/usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require': cannot load such file -- mechanize (LoadError)
        from /usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
        from /home/oshiro/sbiclient.rb:2:in `<top (required)>'
        from /usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
        from /usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'

種々やって、よくわからんのだが、他でも色々と苦労されている模様:

直接rvm上のrubyバイナリをバージョン番号付きで呼び出せとか、rvm側を呼び出すよう別のシェルスクリプトを組めだとか、何やら訳のわからない解決策がぞろぞろ。

次のページには「rvm cron setup」を使えとの記述が:

これをやってみると、自身のcrontabファイルの冒頭に下記のようなrvm環境の設定が付け加わるようになり、実行も問題なく行なえるようになった。

#sm start rvm
PATH="/usr/local/rvm/gems/ruby-2.2.1/bin:/usr/local/rvm/gems/ruby-2.2.1@global/bin:/usr/local/rvm/rubies/ruby-2.2.1/bin:/usr/local/rvm/gems/ruby-2.2.1/bin:/usr/local/rvm/gems/ruby-2.2.1@global/bin:/usr/local/rvm/rubies/ruby-2.2.1/bin:/usr/local/rvm/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:"
GEM_HOME='/usr/local/rvm/gems/ruby-2.2.1'
GEM_PATH='/usr/local/rvm/gems/ruby-2.2.1:/usr/local/rvm/gems/ruby-2.2.1@global'
MY_RUBY_HOME='/usr/local/rvm/rubies/ruby-2.2.1'
IRBRC='/usr/local/rvm/rubies/ruby-2.2.1/.irbrc'
RUBY_VERSION='ruby-2.2.1'
#sm end rvm
...

[追記]
上記の環境変数をコメントアウトして、ひとつずつ有効にして試してみたら、とりあえず自分の使い方であれば以下でも動作した:

#sm start rvm
PATH="/usr/local/rvm/rubies/ruby-2.2.1/bin"
GEM_HOME='/usr/local/rvm/gems/ruby-2.2.1'
#sm end rvm
...

PATHの設定は/usr/local/rvm/rubies/ruby-2.2.1/bin/rubyを呼び出すためのものだが、次のように/usr/local/binに’ln -s’しておいて、PATHには/usr/local/binを指定しても動作した。

ln -s /usr/local/rvm/rubies/ruby-2.2.1/bin/ruby /usr/local/bin/
#sm start rvm
PATH="/usr/local/bin"
GEM_HOME='/usr/local/rvm/gems/ruby-2.2.1'
#sm end rvm
...

また、GEM_HOMEの指定はGEM_PATHのどちらかでもいいらしい。

それと、cronに指定するのがスクリプトファイルで、その冒頭でrubyのパスを指定しているのであれば、環境変数のPATHはなくてもいいらしい。

Leave a comment

Your comment