Ruby on Rails Tutorialのsample_appをさくらVPSにインストールした手順
Ruby on Rails Tutorialで作る「sample_app」をさくらVPSにインストールしました。これは、その備忘録です。
構築した環境は、CentOS 6.4+Apache Httpd 2.2.15-28+MySQL 5.1.69をベースに、rvm 1.20.13+Ruby 1.9.3+Passenger 4.0.5+Rails 3.2.13です。
複数のRailsアプリが、同一バージョンのRubyで稼働するものとして、Passengerは「global」にインストールし、アプリ毎にgemsetを用意するという方針にしました。
謝辞
インストールにあたって、以下のサイトを参考にさせていただき、誠にありがとうございました。
前提
Apache HttpdとMySQLは、yum installでインストールし、設定済みです。
この順番で実行したかと思います。申し訳ありませんが、試行錯誤した結果なので、記載漏れなどがあるかもしれません。
rvmとRubyのインストール
$ sudo bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer ) $ sudo usermod -a -G rvm root $ sudo gpasswd -a [USER_NAME] rvm $ sudo gpasswd -a apache rvm $ source /etc/profile.d/rvm.sh $ su # rvm get head # exit (この後、一旦、再起動させたと思います。) $ sudo reboot $ rvm install 1.9.3 $ gem install bundler --no-ri --no-rdoc
Passengerのインストール
$ vi .gemrc gem: --no-rdoc --no-ri $ rvm gemset use global $ gem install passenger $ passenger-install-apache2-module $ sudo vi /etc/httpd/conf.d/passenger.conf LoadModule passenger_module /usr/local/rvm/gems/ruby-1.9.3-p429@global/gems/passenger-4.0.5/libout/apache2/mod_passenger.so PassengerRoot /usr/local/rvm/gems/ruby-1.9.3-p429@global/gems/passenger-4.0.5 PassengerDefaultRuby /usr/local/rvm/wrappers/ruby-1.9.3-p429@global/ruby
sample_appのインストール
sample_appで必要なgemは、「sample」というgemsetにインストールしています。
$ git clone git@github.com:[USER_NAME]/sample_app.git $ cd sample_app $ vi Gemfile gem 'execjs' gem 'therubyracer' group :production do gem 'mysql2' end $ rvm gemset create sample $ rvm gemset use sample --default $ bundle install $ vi config/setup_load_paths.rb if ENV['MY_RUBY_HOME'] && ENV['MY_RUBY_HOME'].include?('rvm') begin gems_path = ENV['MY_RUBY_HOME'].split(/@/)[0].sub(/rubies/, 'gems') ENV['GEM_PATH'] = "#{gems_path}:#{gems_path}@global" require 'rvm' RVM.use_from_path! File.dirname(File.dirname(__FILE__)) rescue LoadError # RVM is unavailable at this point. raise "RVM ruby lib is currently unavailable." end end ENV['BUNDLE_GEMFILE'] = File.expand_path('../Gemfile', File.dirname(__FILE__)) require 'bundler/setup' $ vi .ruby-version 1.9.3-p429 $ vi .ruby-gemset sample $ mkdir tmp $ sudo chown apache:apache tmp $ touch log/production.log $ sudo chmod 0666 log/production.log $ rake db:create RAILS_ENV=production $ rake db:migrate RAILS_ENV=production $ sudo rake assets:precompile RAILS_ENV=production
httpd.confの設定
VirtualHostの設定を既存のhttpd.confに追加しました。
一般公開するわけではありませんので、Digest認証をかけています。
また「/home/[USER_NAME]」ディレクトリは、予め「sudo chmod o+r /home/[USER_NAME]」して、apacheユーザが読めるようにしています。
$ cd /var/www $ sudo ln -s /home/[USER_NAME]/sample_app sample_app $ sudo vi /etc/httpd/conf/httpd.conf <VirtualHost *:80> ServerName [FQDN] RackEnv production DocumentRoot /var/www/sample_app/public ErrorLog /var/log/httpd/sample_app.error_log CustomLog /var/log/httpd/sample_app.access_log combined <Directory /var/www/sample_app/public> AuthType Digest AuthName "Auth Zone" AuthUserFile /etc/httpd/conf/.htdigest Require valid-user Options -Indexes -MultiViews AllowOverride all </Directory> </VirtualHost>
[追記:7/1 19:08]
Apacheのhttpd.confで「KeepAlive On」に変更。
[追記: 7/2 0:19]
さらに、「Header always unset X-Powered-By」を追加。
httpdの再起動
$ service httpd configtest Syntax OK $ sudo service httpd restart
余談
インストール中につまずいた箇所。
- gemsetを「global」から「sample」に変更する方法がよくわからず丸2日悩む。→「config/setup_load_paths.rb」を作成して対処。
- assetsのprecompleに「execjs」などがGemfileに必要だったこと。
GitHubにpushしたら、自動的にテストして、問題なければ本番環境にデプロイする仕組みを入れたい。Jenkins CIにチャレンジしてみようかな...
[追記: 8/20 13:42]
その後、Jenkins CIを入れてみたり、nginx+unicornに変えてみるなど、さくらVPSの1Gプラン(月980円)でかなり遊ばせてもらってます。