R(Rserve) と Rails を連携する(Centos)
目的
railsによるアプリケーションにて、Rによる処理を利用する
環境
Centos6.6
Rails 4.2.3
R3.2.3
Rserv :Rによる処理を提供する
手順
R のインストール
Rのインストール
http://qiita.com/na_ga/items/6ffe45e6ab89e110f709
#yum -y install R
#rpm -qa | grep R-
R_HOMEに環境変数を設定する
export R_HOME=/Library/Frameworks/R.framework/Resources
Rの起動
$R
大文字R
コマンドでRを起動できる
Rserve
Rコマンドで起動したRから、Rservのインストールを行う
install.packages("Rserve")
インストール先は以下となる
/usr/lib64/R/library/Rserve
注1
以下の表示となればダウンロードできる
注2
Rservの起動
$ R CMD Rserveコマンドでターミナルから起動する。
以下のメッセージが出ていれば成功
$ R CMD Rserve
R version 3.2.3 (2015-12-10) -- "Wooden Christmas-Tree"
Copyright (C) 2015 The R Foundation for Statistical Computing
Platform: x86_64-redhat-linux-gnu (64-bit)
R は、自由なソフトウェアであり、「完全に無保証」です。
一定の条件に従えば、自由にこれを再配布することができます。
配布条件の詳細に関しては、'license()' あるいは 'licence()' と入力してください。
R は多くの貢献者による共同プロジェクトです。
詳しくは 'contributors()' と入力してください。
また、R や R のパッケージを出版物で引用する際の形式については
'citation()' と入力してください。
'demo()' と入力すればデモをみることができます。
'help()' とすればオンラインヘルプが出ます。
'help.start()' で HTML ブラウザによるヘルプがみられます。
'q()' と入力すれば R を終了します。
Rserv started in daemon mode.
- デーモンの停止 lsof -i:6311にてポート番号からプロセスIDを見つける
lsof -i:6311
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
Rserve 12173 higashinakano01 3u IPv4 882750 0t0 TCP localhost:6311 (LISTEN)
以下のコマンドでプロセスを切る
kill -9 PID
kill -9 12173
Rserve-Ruby-client
Rservのクライアントをインストールする
コンソールからgemでクライアントをインストールする
gem install rserve-client
Rails アプリケーションの作成
参考 http://qiita.com/HirofumiYashima/items/7c98e22246f0e0dd22b0
アプリケーションを作成する
r_test という名前でサンプルアプリを作る
rails new r_test
アプリケーションが生成される
Gemfile Railsの設定
Gemfileに以下を追加する
gem 'rserve-client', require: 'rserve'
ちなみに、Rに限った話ではないが、上の
therubyracerのコメントアウトを外すのも忘れずに
追加後
bundle install
コマンドで適用する
サーバ自動起動設定
/usr/lib64/R/library/Rserve/libs/Rserve
パスは環境によって異なる
/config/environments/development.rbに
config.after_initialize do
rserve_port = 6311
rserve_path = "/usr/lib64/R/library/Rserve/libs/Rserve"
system("R CMD #{rserve_path} --RS-port #{rserve_port} --slave")
end
コントローラ、ビューを生成する
rails g controller page test
routes.rb
ルーツファイルにコントローラを追加
config/routes.rb
get 'page/test'
コントローラ
app/controllers/page_controller.rb
以下、参照
# encoding:UTF-8
class PageController < ApplicationController
def test
c = Rserve::Connection.new
c.assign("root", Rails.root.to_s)
c.eval <<-EOF
# 標準正規分布に従う乱数の発生
x = rnorm(100,0,1)
# ヒストグラムを作成して保存
png(paste(root, "/app/assets/images/test.png", sep=""))
hist(x)
dev.off()
EOF
end
end
ビュー
参照
app/views/page/test.html.erb
<h1>R on Rails with Rserve</h1>
<%= image_tag 'test.png' %>
~
サーバを起動
WEBRickサーバを起動します
$rails s -b 0.0.0.0
確認
http://ipアドレス:ポート番号/page/test
にてブラウザからアクセス
Ruby on rails からRservを利用してRの計算結果を出力することができました
他の方法
rsrubyのインストール
Rserve
sakuraVPScentosに入れる
http://blog.goo.ne.jp/xmldtp/e/343b05ef5090ae825a6d0bfe8c79f3b5
トラブル
注1
22までにあるサーバから選択しても、エラーとなってしまう
実はここに出ているミラーはすべてではない。
Selection に22を選択し、他の候補を選択すると、
もっと近いサーバが見つかる
日本のサーバを選ぶ Japan YAMAGATを選択した
注2
このあと、Rservの起動時、
/mergefat Rserve.dbg "/usr/lib64/R/bin/Rserve.dbg"
installing via 'install.libs.R' to /usr/lib64/R/library/Rserve
** R
** inst
** preparing package for lazy loading
** help
*** installing help indices
converting help for package ‘Rserve’
finding HTML links ... 完了
Rserv html
run.Rserve html
self html
** building package indices
** testing if installed package can be loaded
* DONE (Rserve)
Making 'packages.html' ... 完了
ダウンロードされたパッケージは、以下にあります
‘/tmp/RtmpWMDbDr/downloaded_packages’
'.Library' 中のパッケージの HTML 索引を更新します
Making 'packages.html' ... 完了
もし、このメッセージが以下のように
$ R CMD Rserve
/usr/lib64/R/bin/Rcmd: line 62: exec: Rserve: not found
Rservコマンドが起動せず、ディレクトリが実際見つからなかった場合、Rservのインストールに実は失敗していた可能性が有る
Rでのインストール時のログで
cp: cannot create regular file `/usr/lib64/R/bin/Rserve': 許可がありません
make: [server] エラー 1 (無視されました)
./mergefat Rserve.dbg "/usr/lib64/R/bin/Rserve.dbg"
cp: cannot create regular file `/usr/lib64/R/bin/Rserve.dbg': 許可がありません
make: [server] エラー 1 (無視されました)
というようなのがある場合、失敗している。
この場合ディレクトリが作られていないよう
ちゃんと作成されいない場合、Rを起動した権限が足りていないため正しくインストールされていなかった可能性が有る。
sudoでRを起動した上でインストールを行う等で解決できる
Author And Source
この問題について(R(Rserve) と Rails を連携する(Centos)), 我々は、より多くの情報をここで見つけました https://qiita.com/yukihigasi/items/57a67c0c001e374f94e2著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .