なんかばんざい

会社や家で感じたもんのとある備忘録!!

Passenger 2.0 RC1でMerbを動かしてみた(Ubuntu 8.04)

Rails用Apacheモジュールとして話題をかっさらったmod_rubyことPassengerですが、v2.0ではRackとWSGIをサポートしたことでRails以外の(Rack対応した)フレームワーク、およびPythonのDjangoまで動くというめちゃくちゃ野心的な動きをしています(「勘違いしないでくれ。主眼はあくまでRailsのサポートであって、WSGIサポートはpassengerの柔軟なアーキテクチャを示すためだ」とか言ってますが)。

というわけでZed Shawがいかしたフレームワークと呼ぶMerbをPassenger 2.0 RC1で動かしてみた。以下Ubuntu 8.04をベースに進めていきますが、適宜読み替えてもらえば他のディストリでも大丈夫だと思います。

結論からいうと

MERB_ROOTにconfig.ruって名前のrackup用ファイルをおいとけばPassengerが勝手に読むみたい。あるいはRackBaseURIで明示的に指定っぽい。

Passenger 2.0 RC1のインストール

~/# wget http://phusion-passenger.googlecode.com/files/passenger-1.9.0.gem
~/# sudo gem install passenger-1.9.0.gem
~/# sudo passenger-install-apache2-module
--snip--
Please edit your Apache configuration file, and add these lines:

   LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-1.9.0/ext/apache2/mod_passenger.so
   PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-1.9.0
   PassengerRuby /usr/bin/ruby1.8

/etc/apache2/mods-available/passenger.confにLoadModule....をコピペして、mods-enable/passenger.confからシンボリックリンクを張る。

とりあえず試すだけならhttpd.confにコピペしてもいい。

Merbインストール

SQLite3とかはとりあえず入ってるものと仮定。

~/ # sudo gem install activerecord merb merb_has_flash merb_helpers merb_activerecord

--snip--

~/ # merb -v
merb 0.9.3 ()

Merbでつくる

Jamie Hoover - Merb, SQLite, and Nginx on Ubuntuとかmerb.introを参考に進める。

rake dm:db:automigrateが動かなかったのでDataMapperじゃなくてActiveRecordを使うことにした。

~/ # merb-gen app testapp
~/ # cd testapp
~/testapp # vim config/init.rb

# Uncomment for ActiveRecord ORM
use_orm :activerecord

~/testapp # merb-gen resource article title:string body:text

-- config/database.ymlが無いっておこられる --

~/testapp # mv config/database.yml.sample config/database.yml
~/testapp # vim config/database.yml

---
# This is a sample database file for the ActiveRecord ORM
:development: &defaults
  :adapter: sqlite3
  :database: sample_development
  :username: the_user
  :password: secrets
  :host: localhost
  :socket: /tmp/mysql.sock
  :encoding: utf8

:test:
  <<: *defaults
  :database: sample_test

:production:
  <<: *defaults
  :database: sample_production

~/testapp # merb-gen resource article title:string body:text

  dependency  model
      exists    app
      create    app/models
      create    app/models/article.rb
  dependency    migration
      create      schema/migrations
      exists      schema
      exists      schema/migrations
      create      schema/migrations/001_article_migration.rb
  dependency    merb_model_test
      exists      spec
      create      spec/models
      create      spec/models/article_spec.rb
  dependency  resource_controller
      exists    app
      exists    app/helpers
      exists    app/views
      create    app/views/articles
      exists    app/controllers
      create    app/helpers/articles_helper.rb
      create    app/views/articles/show.html.erb
      create    app/views/articles/index.html.erb
      create    app/views/articles/edit.html.erb
      create    app/views/articles/new.html.erb
      create    app/controllers/articles.rb
  dependency    merb_resource_controller_test
      create      spec/controllers/
      create      spec/helpers/
      exists      spec
      exists      spec/helpers
      create      spec/views
      create      spec/views/articles
      exists      spec/controllers
      create      spec/helpers/articles_helpers.rb
      create      spec/views/articles/delete.html.erb_spec.rb
      create      spec/views/articles/index.html.erb_spec.rb
      create      spec/views/articles/edit.html.erb_spec.rb
      create      spec/views/articles/new.html.erb_spec.rb
      create      spec/views/articles/show.html.erb_spec.rb
      create      spec/controllers/articles_spec.rb


~/testapp # rake db:migrate

--snip--

~/testapp # merb -p 3001

とりあえず普通にMerbが動くかテスト。http://localhost:3001/articlesを見てみて「Edit this file in app/views/articles/index.html.erb」とか表示されたらOK。

続いてPassengerの設定。Merb Wiki | Phusion Passengerを参考に。


~/testapp # vim config.ru

# config.ru
require 'rubygems'
require 'merb-core'

Merb::Config.setup(:merb_root   => ".",
                   :environment => ENV['RACK_ENV'])
Merb.environment = Merb::Config[:environment]
Merb.root = Merb::Config[:merb_root]
Merb::BootLoader.run

run Merb::Rack::Application.new

~/testapp # sudo vim /etc/apache2/httpd.conf

<virtualhost *:80>
	ServerName merb-test
	RackEnv development
	DocumentRoot /home/myname/testapp/public
	ErrorLog /home/myname/testapp/log/error.log
</virtualhost>

~/testapp # sudo /etc/init.d/apache2 force-reload

/etc/hostsに「127.0.0.1 merb-test」を追加して、http://merb-test/が見れたら成功。

ほか

メール

フォクすけ

Mozilla Firefox ブラウザ無料ダウンロード