Ruby言語やLinuxのネタが多いです。
November 30, 2008 [おもひで]
■ [Rails] Ruby-Locale for Ruby on Rails sample
Ruby-Locale for Ruby on Railsにあるサンプルにちょっと手を加えて公開してみました。ぜひ見てみてくださいまし。
■ [Rails] Rails2.2でサイトトップではないアプリケーションの配置・設定
今回のLocale for Ruby on RailsのサンプルはApacheのCGI(XREA上)でかつ、サイトのサブディレクトリに配置(http://www.yotabanana.com/locale_rails_sample/)した。色々大変だったのでその時のメモ。
まず、ファイルの配置。/virtual/yotabanana/がXREA上のディレクトリ。とりあえず、ローカルの/home/mutoh/配下にディレクトリを作る。
/home/mutoh/virtual/yotabanana/locale_rails_sample/
| +app/
| +config/
| +public/
| +vendor/
| + ...
+lib/ruby/
+site_ruby/1.8
+gems/
/home/mutoh/virtual/yotabanana/lib/配下には/usr/lib/ruby/配下の内容をコピーして置く。基本的にはRubyGemsがインストールされている状態であればOKなはず(面倒くさいので全部コピってしまった)。
それから、RAILS_ROOT配下(RAILS_ROOT = /home/mutoh/virtual/yotabanana/locale_rails_sample/ね)で、rake gems:unpack, rake rails:freeze:gemsしてgemとrailsの関係ファイルを全部vendor配下にコピーしておく(/usr/lib/ruby配下をコピーさえしてしまえば実はこの作業自体不要なのかもしれないけど複数のバージョンのRailsアプリを入れる場合等は必要)。
で、Apacheの設定。RAILS_ROOT/public/.htaccessを編集する。
Options +FollowSymLinks +ExecCGI
AddHandler cgi-script .cgi
RewriteEngine On
RewriteRule ^$ index.html [QSA]
RewriteRule ^([^.]+)$ $1.html [QSA]
RewriteCond %{REQUEST_FILENAME} !-f [OR]
RewriteCond %{REQUEST_METHOD} =POST [NC]
RewriteRule ^(.*)$ dispatch.cgi [QSA,L]
SetEnv RAILS_ENV production
#SetEnv RAILS_ENV development
SetEnv GEM_HOME /virtual/yotabanana/lib/ruby/gems/1.8
SetEnv RUBYLIB /virtual/yotabanana/lib/ruby:/virtual/yotabanana/lib/ruby/site_ruby/1.8
config/routes.rbを編集する。path_prefixをつけてhttp://www.yotabanana.com/locale_rails_sample/がアプリのルートになるようにする。
ActionController::Routing::Routes.draw do |map|
path_prefix = :locale_rails_sample
map.resources :samples, :collection => {:clear_cookie => :get,
:cached_action => :get}, :path_prefix => path_prefix
# Localized Routing.
map.connect ':lang/:controller/:action/:id', :path_prefix => path_prefix
map.connect ':lang/:controller/:action/:id.:format', :path_prefix => path_prefix
map.connect ':controller/:action/:id', :path_prefix => path_prefix
map.connect ':controller/:action/:id.:format', :path_prefix => path_prefix
map.root :controller => "samples", :path_prefix => path_prefix
end
#これ、全部にpath_prefixつけなくてもよい方法ないのかなー。
config/environment.rbを編集する。こちらもアプリケーションのルートを指定するイメージ。
Rails::Initializer.run do |config|
:
:
config.gem "locale"
config.gem "locale_rails"
config.action_controller.asset_host = "http://www.yotabanana.com/locale_rails_sample"
end
config.action_controller.asset_hostの指定をしないとスタイルシート・Javascript等の設定がうまくいかないようだ。この辺、もうちょっとroutes.rbで頑張れるんじゃないかと思うんだけど・・・。挫折。もっといいやり方があったら教えてください。
で、ファイルの編集が終わったところで/home/mutoh/locale_rails_sampleをXREA上の/virtual/yotabanana/locale_rails_sampleへFTPでコピー。
で、sshでXREAにログインしてシンボリックリンクを貼る。
$ cd /virtual/yotabanana/public_html $ ln - s /virtual/yotabanana/locale_rails_sample/public locale_rails_sample
あとは、http://www.yotabanana.com/locale_rails_sample/でアクセスできるようなった。
ということで、XREAに限らず、一つのURLの元、複数のRailsアプリケーションを動作させる場合にも使えると思いまーす。
参考:

環境変数RAILS_RELATIVE_URL_ROOTとかを設定するとそれだけでサブディレクトリにおけるはずです。Apacheではあんまりやってないんですけど、もっと簡単なのがあったような。<br>mongrelとかthinだと起動時に--prefixオプションを指定するとこれまた簡単にサブディレクトリ下におけます。
おぉ、環境変数一発ですか!?<br>知らなかった・・・orz。<br><br>でも、情報ありがとうございました!!