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 で環境変数を設定するといった内容でした。

以上。





 

Sponsored Link

 

Comments