よたらぼ
自分の興味の赴くままにIT技術系のネタを取りとめもなくメモっています。
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アプリケーションを動作させる場合にも使えると思いまーす。

参考:

  • http://tam.qmix.org/archives/2005/03/xrea_ruby_on_ra.html
  • http://wiki.rubyonrails.com/rails/pages/Non+VHost+Installation
  • http://wiki.rubyonrails.org/rails/pages/HowToInstallApplicationsInSubdirectories
  • 本日のツッコミ(全2件) [ツッコミを入れる]
    もろはし (December 01, 2008 11:14)

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

    むとう (December 01, 2008 23:20)

    おぉ、環境変数一発ですか!?<br>知らなかった・・・orz。<br><br>でも、情報ありがとうございました!!


    編集