Ruby on Rails - Ruby+RSRuby のスクリプトを動かす!
Updated:
Ruby + RSRuby で正常に動作していたスクリプトを Ruby on Rails アプリからコールすると動作しません。
Fatal Error: R home directory is not defined
などとなります。 R のホームディレクトリが定義されていないと言っています。
ちなみに、RSRuby とは Ruby で統計解析向けプログラミング言語 R を使用する際に使用する Gem パッケージです。
作業記録
0. 前提条件
以下の環境で作業、確認しました。
- Scientific Linux 6.3
- Ruby は 1.9.3-p286
- Rails は 3.2.8
1. 現象
元々、Ruby + RSRuby では正常動作しているスクリプトなので、環境変数 R_HOME も設定してある。 当方は、全ユーザで有効になるよう “/etc/profile” で設定している。 ( 環境によっては、”.bashrc” や “.bash_profile” を編集しているかも知れません)
また、通常 Rails から Ruby スクリプトをコールする際は system
関数を使用したり、バッククォートで囲んだりする。
こうしてコールすると冒頭のような R のホームディレクトリが定義されていない旨のエラーとなる。
2. 対策方法
Rails アプリの “config/environment.rb” に環境変数の設定を記述すればよいようだ。 (R が “/usr/lib64/R” にインストールされている場合)
# vi config/environment.rb
# R_HOME 設定
ENV['R_HOME'] ||= '/usr/lib64/R'
そして、設定を有効化するために Web サーバを再起動する。
果たしてこの方法が正しかったのか否かは不明ですが、とりあえず Ruby on Rails アプリから既存の Ruby + RSRuby のスクリプトをコールして動作するようにはなりました。
また、今回は Ruby on Rails で Ruby + RSRuby のスクリプトをコールすると言うよりは、Ruby on Rails で環境変数を設定するといった内容でした。
以上。
Comments