- 更新日: 2013年10月9日
- Ruby
レンタルサーバーに rbenv + ruby-build + ruby 2.0 環境を作った
先日作っていたスクレイピングのスクリプト(Ruby2.0製)が完成して、借りているレンタルサーバーで動かす環境を整えました。スクリプトの内容は、RSSを提供していないあるサイトをスクレイピングして解析後、更新情報のRSSを出力させるというものです。完全にプライベートな個人用です。
VPSだと楽にできるんだろうでしょうけど、普通の共用レンサバなので root ないし yum install とか使えない。ユーザーのホームディレクトリ以下に色々インストールしたり設定しました。結構すんなり行けたのですけど、はまるポイントは各々レンタルサーバー事業者で異なるかと思います。
以下の作業は、レンタルサーバーに ssh ログインしてから作業しました。
1 2 3 4 |
$ ssh hogehoge Last login: ... |
$HOME(~)以下に色々インストールするための準備
まずは、ユーザーのホームディレクトリ($HOME/~)に以下のディレクトリを作成。
~/local
~/local/src
~/local/bin
1 2 3 4 5 |
$ mkdir ~/local $ mkdir ~/local/src $ mkdir ~/local/bin |
~/.bashrc に $HOME/local/bin のパスを先頭に追加して反映しておきます。
1 2 3 4 5 |
$ vim ~/.bashrc export PATH=$HOME/local/bin:$PATH $ source ~/.bashrc |
git をインストール
続いて git を wget でダウンロードしてインストール。configure 時に –prefix=$HOME/local を忘れないようにする。
1 2 3 4 5 6 7 8 9 |
$ cd ~/local/src $ wget https://git-core.googlecode.com/files/git-1.8.3.3.tar.gz --no-check-certificate $ tar zxf git-1.8.3.3.tar.gz $ cd git-1.8.3.3 $ ./configure --prefix=$HOME/local $ gmake ... |
ここで、msgfmt コマンドが見つかりませんというエラー発生。msgfmt は gettext に含まれているそうなので gettext をインストールします。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ cd ~/local/src $ wget http://ftp.gnu.org/pub/gnu/gettext/gettext-0.18.3.1.tar.gz $ tar zxvf gettext-0.18.3.1.tar.gz $ cd gettext-0.18.3.1 $ ./configure --prefix=$HOME/local $ make $ make install $ which gettext ~/local/bin/gettext $ which msgfmt ~/local/bin/msgfmt |
gettext および msgfmt が入りました。
git のインストールをやり直します。
1 2 3 4 5 6 7 8 9 10 |
$ cd ~/local/src/git-1.8.3.3 $ ./configure --prefix=$HOME/local $ gmake $ gmake install $ which git ~/local/bin/git $ git --version git version 1.8.3.3 |
git が無事に入りました。
rbenv をインストール
~/local/rbenv に rbenv をインストールします。
1 2 3 4 |
$ cd ~/local $ git clone git://github.com/sstephenson/rbenv.git rbenv |
続いて ruby-build を rbenv のプラグインとして入れます。
1 2 3 4 5 |
$ mkdir ~/local/rbenv/plugins $ cd ~/local/rbenv/plugins $ git clone git://github.com/sstephenson/ruby-build.git ruby-build |
~/.bashrc に rbenv のパスを先頭に追加して、起動コマンド rbenv init – も記述します。
1 2 3 4 5 6 7 8 |
$ vi ~/.bashrc $ source ~/.bashrc export RBENV_ROOT=$HOME/local/rbenv export PATH=$RBENV_ROOT/bin:$HOME/local/bin:$PATH eval "$(rbenv init -)" $ source ~/.bashrc |
rbenv でインストール可能な ruby のバージョンを確認。
1 2 3 4 |
$ rbenv install -l ... |
Ruby2.0 の最新版 Ruby 2.0.0-p247 をインストール。
1 2 3 4 |
$ rbenv install 2.0.0-p247 $ rbenv rehash |
2.0.0-p247 をデフォルトの Ruby に設定。
1 2 3 |
$ rbenv global 2.0.0-p247 |
インストールした Ruby を確認。*印は現在使っている Ruby。
1 2 3 4 5 |
$ rbenv versions system * 2.0.0-p247 (set by ~/local/rbenv/version) |
Ruby コマンドの場所。
1 2 3 4 |
$ which ruby ~/local/rbenv/shims/ruby |
Ruby のバージョン確認。
1 2 3 4 |
$ ruby --version ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-linux] |
gem のバージョンやインストール済みの gem を確認。
1 2 3 4 |
$ gem --version $ gem list |
bundler をインストール
1 2 3 4 |
$ rbenv exec gem install bundler $ rbenv rehash |
スクレイピング+RSS生成スクリプトを設置
Ruby スクリプトは public_html 以外に配置しました。ちっちゃなコードなので FTP でアップロードしました。必要に応じて実行権も付与する。
— レンタルサーバーに設置した各ファイルの場所(仮定) —
スクリプトの場所 : ~/script/build-rss/
スクリプト本体 : ~/script/build-rss/build-rss.rb
Gemfile : ~/script/build-rss/Gemfile
RSSを吐き出す場所: ~/public_html/rss.xml
~/script/build-rss/build-rss.rb を実行して、~/public_html/rss.xml に出力させます。そして、それをRSSリーダーに登録する。
初期状態ではスクリプト本体と Gemfile だけ設置。
1 2 3 4 5 6 |
$ cd ~/script/build-rss $ ls -la -rw-r--r-- 1 user group 60 10月 8 20:19 Gemfile -rw-r--r-- 1 user group 2855 10月 8 20:39 build-rss.rb |
bundle install
スクリプトを設置後、レンタルサーバーに ssh ログインした状態で bundle install します。
1 2 3 4 |
$ ssh hogehoge Last login: ... |
bundle install を行いますが、rbenv exec gem install bundler で bundler を入れたためか、rbenv exec bundle install としないと行けない模様。ちょっと面倒臭い・・・
1 2 3 4 |
$ cd ~/script/build-rss/ $ rbenv exec bundle install --path vendor/bundle |
Gemfile に書いていた nokogiri や builder が無事にインストールされました。
続いて、スクリプトを実行テスト。こちらも rbenv exec bundle exec ruby build-rss.rb とやらないといけないみたい。ちょい面倒だけど後で cron 化するのでまあいいや。
1 2 3 |
$ rbenv exec bundle exec ruby build-rss.rb |
無事に動いて、RSSが出力されました。
シェルスクリプトを作成して cron で実行する設定
レンタルサーバーの GUI 管理パネルでの cron 設定で、プログラムの絶対パスを登録するようになっていたので、Rubyスクリプトを実行するシェルスクリプトを作成しました。
1 2 3 4 5 6 7 8 9 10 |
$ vi ~/script/build-rss/build-rss.sh #!/bin/sh HOME=/home/user_id export RBENV_ROOT=$HOME/local/rbenv export PATH=$RBENV_ROOT/bin:$HOME/local/bin:$PATH eval "$(rbenv init -)" cd $HOME/script/build-rss/ rbenv exec bundle exec ruby build-rss.rb |
【2013/10/11 追記】
cron がエラーになるのでシェルスクリプトを修正しました。上記のように、~/.bashrc に書いたのと同様に、シェルスクリプトの中で PATH を設定し、rbenv 起動コマンドを記述しました。これで、無事に cron で実行できました。
作ったシェルスクリプトに実行権を付与して実行テストします。
1 2 3 4 5 |
$ chmod +x ~/script/build-rss/build-rss.sh $ cd ~ $ ~/script/build-rss/build-rss.sh |
正常に動作しました。最後にレンタルサーバーの GUI での cron 設定画面で、1日1回 cron 実行する設定を行い終了。
- – 参考リンク –
- さくらのレンタルサーバに Ruby 1.9.3 と gem をインストール – TMD45INC!!!
- さくらレンタルサーバ(スタンダード)にgitをインストール | Shift-Style-Blog
- Ruby の関連記事
- Gemの作り方(Ruby Gem)
- ローカル開発中のgemをGemfileに書いてインストール
- 熊本地震の余震が夜に多いのは本当か?Rubyプログラムで検証してみた
- El Capitanでgemのnative extensionビルド失敗に対応
- Rubyで親クラスから子クラスの定数を参照
- MacabをRubyで使う
- rbenv/ruby-buildでRuby最新バージョンをインストール
- Rubyでクラスインスタンス変数にインスタンスメソッドからアクセス
- 距離1kmあたりの緯度・経度の度数を計算(日本・北緯35度)
- Google Maps Geocoding APIで住所から緯度・経度を取得するRubyコード
- 4件のコメント
綺麗にまとめられていたので参考にさせていただきました。
—————–
$ vim ~/.bashrc
export PATH=$HOME/local/bin:$PATH
$ source ~/.bashrc
—————–
の箇所で
source ~/.bashrc
と入力すると
export : Command not found.
と表示されてしまいます。
検索してもいまいち原因が理解できておりません。何か助言がいただけるとありがたいです。
匿名さん、コメント有難うございます。
「export : Command not found.」
ですが、文面通りに受け取ると export コマンドが見つからない、という意味のエラーメッセージです。
コンソールから以下のコマンドで、export コマンドを確認してみられて下さい。
$ type export
これで…
「export is a shell builtin」
と表示されたら export コマンド自体は使えますので、~/.bashrc の書き方でどこかミスがあるのかもしれません。
以上ですが、よろしくお願いいたします。
takaさん
とても早い回答ありがとうございますm(_ _)m。
どうやらbashになっていなかった(?)ようで、chshでbashに変更した所、お教えいただいた「$ type export」も「export is a shell builtin」と表示され、無事にできました。ありがとうございます。
匿名さん、無事に動くようになったようで良かったです^^
動いたかどうか気になっていましたので、お返事があって嬉しいです。
ご報告ありがとうございました!