Passenger (mod_rails) を使ってみた
Overview — Phusion Passenger (a.k.a. mod_rails)
思ったより簡単だったのでちょっとだけ手順を書いておく。
- Apache は 2.2 系
- Rails2.0.2
- Redmine0.7.0RC1
上記はインストールできている and 動作確認できている前提で。 まずは、Passenger をインストール。
で以下のコマンドを実行。
そうすると対話型っぽい感じになって色々と親切に教えてくれる。足りないライブラリとそれらの入手方法とか。 個人的にはもう少し不親切でもいいような気がした。
このコマンドではApacheのモジュールをビルドするので Windows ではかなり苦労するであろう事が予想される。(調べてないけど)
最後に、httpd.conf に書く設定内容が表示されるのでそれをコピペして Apache を再起動すればOK。 各アプリの設定は後で書く。
もう一つのインストール方法でやる場合は、ソースを展開したディレクトリの下にビルドしてインストールされてしまうので、ちょっと気持ち悪い。手でコピーすればいいけどコマンドが動的に生成されるっぽいのでその辺の調整が必要。
### Redmine を使う
- /var/webapps/redmine に置いている
- /var/www/html が Apache の DocumentRoot
サブドメインが使える場合は以下でOK。
サブドメインが使えない場合(素朴なイントラネットなど)。
のようにシンボリックリンクを DocumentRoot 以下に用意する。 で、以下の内容を httpd.conf を追加する。
サブドメインが使える場合は NameBase の VirtualHost でいくらでもアプリケーションを置くことができるが、そうでない場合は以下のようにすればいけるかもしれない。(まだ試してない)
考えてみたけど VirtualHost を使用せずに一つのアプリに別々のRailsEnv を設置する方法がわからない。 上のやり方だと、一つの環境しか設定できないような気がするし。
以上の設定内容は全部、 Passenger のサイトに書いてあった。最初からドキュメントが揃っているのは素晴らしい!
Posted in Ruby | コメントはありません |
Capistrano を使ってみた
Ruby で作られたデプロイツール Capistrano を使ってみたので使い方をまとめておく。
インストール
gem でインストールする。
依存ライブラリも入るはず。
最初の一歩
こでは2.2.0を使用する。
Rails アプリを作成しているディレクトリに移動して capify コマンドを実行するだけで その Rails アプリは Capistrano 対応になる。
capify コマンドでは以下のファイルが生成される。
- Capfile
- レシピファイル
- config/deploy.rb
- 設定ファイル
あとは config/deploy.rb を編集するだけで良い。
config/deploy.rb の編集
set :hoge のところは特に説明は不要だと思う。しかし、set :repository の設定でちょっとハマったので後述する。 role の方は、各サーバーの名前や IPアドレスを記述する。ドキュメントによると複数のサーバを指定することも可能なようだ。 ウチでは全部同じサーバなのでそういう風に設定した。
これでデプロイ先にディレクトリが作成される。
これで足りないものが無いかチェックしてくれる。
初回のデプロイは上記コマンドを実行する。二回目以降は以下を実行する。
簡単ですね!
ハマりポイント
ウチのサーバの構成。
ご存知のとおり、Subversion は svn, svn+ssh, file, http, https などのプロトコルに対応している。 自分の場合は、 svn+ssh でアクセスするようにしていたので最初はそのように設定した。
その場合、以下のように実行されるようでうまく行かなかった。
- ローカルでリポジトリの情報を取得
- app サーバに ssh で乗り込む[a]
- appサーバから svn+ssh でリポジトリからデータを取得[b]
3番の部分で ssh のコネクションが突然閉じてしまう。ログを確認してもよく分からなかったのであまり調査せずに サーバに乗り込んでから cap コマンドを実行するようにした。
リポジトリの設定だけ file:// を使用するように変更した。
今のところうまく動いているので、もう少し時間のある時にしっかり調べてみようと思う。
Posted in Ruby | コメントはありません |
第 24 回 Ruby 勉強会 @ 関西 初級者レッスン演習問題添削
- 第24回 Ruby/Rails勉強会@関西に参加 - ekurodaの日記
- 宿題 その 1 - ひがきの日記
- 第24回Ruby/Rails勉強会@関西 初級者レッスン課題こたえ - サイログ。MiyakoとかRubyとかなんとか+Miyako ACCESS MAP
- 第 24 回 Ruby/Rails 勉強会(Ruby初心者向けレッスン) - winplusの日記
- Ruby/Rails勉強会@関西 #24 - チナミニ
- Ruby/Rails勉強会@関西 #24に行ってきたよ! - はこべにっき#
コードを書いて晒してくれていたのは上記の人たち。
# 公式サイトにトラックバックしてくれてた中から抜粋しました
今回はその中から特に添削希望してたっぽい上二つを添削します。
id:e-kuroda
id:mas-higa
Posted in Ruby | コメントはありません |
第 24 回 Ruby 勉強会 @ 関西 初級者レッスン演習問題添削
- 第24回 Ruby/Rails勉強会@関西に参加 - ekurodaの日記
- 宿題 その 1 - ひがきの日記
- 第24回Ruby/Rails勉強会@関西 初級者レッスン課題こたえ - サイログ。MiyakoとかRubyとかなんとか+Miyako ACCESS MAP
- 第 24 回 Ruby/Rails 勉強会(Ruby初心者向けレッスン) - winplusの日記
- Ruby/Rails勉強会@関西 #24 - チナミニ
- Ruby/Rails勉強会@関西 #24に行ってきたよ! - はこべにっき#
コードを書いて晒してくれていたのは上記の人たち。
# 公式サイトにトラックバックしてくれてた中から抜粋しました
今回はその中から特に添削希望してたっぽい上二つを添削します。
# 例によって趣味が出てます。
ここでは添削後のコードを示しますので、添削前のコードはリンク先を参照してください。
ちなみに今回は時間の都合でログ解析の添削はやりません。あしからずご了承ください。
id:e-kuroda
添削ポイント
- printf を使う意味が少ないところでは使わないようにした
- puts の方が短いため
- 出現頻度のところで一つずつ printf してたのをやめた
- リストを作ったならできるだけリストのまま処理した方がわかりやすいため
- 単語出現頻度の方でレイアウトが崩れていたのを修正した
- 正規表現も直そうかと思ったけどやめておいた(\Wを使えば済んだ?)
id:mas-higa
添削ポイント
- 分けて実行するのが面倒だったので一つのファイルにまとめました
- 直す所が少なくて困りました
- 比較的スコープが長い一文字変数はやめた
- ゴルフしてた?
- 文字別の所で登場回数ゼロの見えない文字も結果に表示する様にした
- printf を使わずにやりたかったけど面倒だったのでやめた
今後のこと
- 添削希望者は自分のブログに「添削希望」と書いて公式wikiにトラックバック
- 希望者が多い場合は「添削しやすい」コードを添削します
- 約一週間かかります
- 忙しいときはできないかもしれません
Posted in Ruby | コメントはありません |
第23回Ruby勉強会@関西の初級者レッスン演習問題の解答例たち
- 第23回 Ruby/Rails勉強会@関西に参加してきた (Kanasansoft Web Lab.)
- ころころ毬藻転がし(RC) 第23回 Ruby/Rails勉強会@関西に関するメモ
- RubyKansai23 - Ruby/Rails勉強会@関西に行ってきた - 風産み日記
- Ruby関西勉強会#23参加 - らいとなひび
- ruby勉強会の演習問題を解いてみた - いつの間にか27歳日記
- Ruby/Rails勉強会@関西 - チナミニ
- 2008-02-17 - ekurodaの日記
- wwwaku » 2008 » 2月 » 17
- Nov's daily? report - DeveloperNews #4 , 第23回 Ruby/Rails勉強会@関西 , 最近の Amazon , tail
ざっとこんなもんかな。時間ある時に勝手に添削する。
# 添削希望のものだけね。
Kanasan の 100 マス計算
趣味も大分入るけど以下のような感じで添削しました。
- 題意を勘違いしてる?
- 演算子もランダムにして欲しかったけどこれはこれでアリなので活かすことにする
- 使える演算子は決まっているので、定数化する
- 入力値のチェックに正規表現を使っていたがこの程度なら文字列比較で十分
- 一度初期化したら変わらない変数は定数にする
- メソッド定義のカッコは省略しない
- るりまのフォーマットに従う方向で。
- exit 1 にしとく
- コマンドの失敗時の戻り値は 1 であることが多いため
- 一文字変数はスコープが短い所で使用する
- 配列の変数名は配列であることが予想できるような名前にする
やらなかったこと
- 100マス化
- 今のは 81 マスしかない
- 短く簡潔にすること
- やっちゃうと大改造になるため(元が残らない)
sixeight さんの 100 マス計算
同じく趣味が入るけどこんな感じ。
- いくつかの変数名/メソッド名を変更した
- 多分、わかりやすくなった?
- initialize に仕事積めすぎなので @header を make_question に移動
- そうするとインスタンス変数である必要がなくなるのでローカル変数にした
- make_matrix は表作成専用にした
適切に仕事を分割することでよりよくなったはず。
Posted in Programming, Ruby | コメントはありません |
第23回 Ruby勉強会@関西に行ってきた
いつも通りみんなの集合時間より早く行って簡単な打ち合わせ。
日本Rubyの会 公式Wiki - 第23回 Ruby/Rails勉強会@関西
Ruby1.9 の仕様 − Array 関連の新しい機能 by こなみ さん
よくも悪くも講義?って感じだった。 最後の方の内容が面白かっただけに尻切れとんぼっぽくなったのが残念。
純粋関数型言語Ruby(3) 30分でわかるMonad by 氏久(ujihisa)さん
やっぱり 30min ではわからなかった Monad
参加者大半おいてけぼり??
Rails以外のWebアプリケーションフレームワーク」 by yhara さん
merb, capmping, ramaze の紹介。前二つはストヤン経由で聞いてたけど結局試してなくてごめんなさい。
今度、試す。
Rubyのリフレクション by 大林さん
おもしろかった。久しぶりに燃えるセッションだった。 # って自分こんなにリフレクション好きだったっけ?
すごく勉強になった。要復習。
これくらいの濃さのセッションが毎回あるといいのだけど。
Ruby初級者向けレッスン第17回 by okkezさん
自分のセッション。
初級者レッスンと言いつつ、るりまの宣伝乙。 演習問題もリファレンスを見てやってもらう前提だったのでこんなものかと。
演習問題の最後に、使うかもしれないメソッド一覧を載せたのは良かったらしい。Keep
そう言えば、自分が発表する場合の時間の読み方がかなり正確になってきた気がする。
Posted in Ruby | コメントはありません |
Date#cweek
Ruby には暦週を求める Date#cweek というメソッドがあるが、こいつは月曜日スタートで日曜日で終わる。
でも、たまに日曜日から土曜日での暦週が欲しくなることがある。というか今日必要になった。
なので作ってみた。
とりあえず試した範囲では上手く動いてた。
Posted in Ruby | コメントはありません |
第22回 Ruby/Rails勉強会
行ってきました。
Ruby勉強会のときは大抵、天気がよろしくないってのは定説なのだろうか。今回もくもりときどき雨。
今回は、スタッフのうちで学生なメンバーが動けなかったので、急遽司会担当。事前打ち合わせほとんどなしで臨んだ。
人工知能で学ぶ Ruby (入門) by 石川 さん
Excel で一次元な RPG っていうのが面白かった。Ruby で変愚蛮怒みたいなのを作ると面白いのかもとか思ったけど、その場で名前が思い出せなかったので言わなかった。
大学での人工知能の講義の初歩の初歩ってこんな感じなのかってのがわかって面白かった。
Miyako1.4でつくるアニメーション by サイロス誠 さん
サイロスさんがずっと開発してらっしゃるゲーム作成のためのライブラリの新バージョンの紹介。
動画の上で画像を動かすことが出来たのは面白いと思った。
「Ruby on Windows」出版記念講演 by cuzic さん
基調講演っぽくて良かった。 cuzic さんの熱い思いが伝わりました。
その後の即売会も、盛り上がってたみたいで良かったです。
ショートな課題でジャムプログラミング by こなみ さん
いくつか、問題があってそれを解くというモノ。 前日に解いていたので、自分のを Hiki にこっそりアップしておいた。
ナビゲータがもう少ししっかりコントロールして欲しかった。
懇親会
例によって懇親会は mixi で書くかもしれない。
Posted in Ruby | コメントはありません |
第 20 回 Ruby 勉強会@関西 初級者レッスン演習課題解答例(RSpec版)
Test::Unit版 と同じことを RSpec でやってみた。
第 20 回 Ruby 勉強会@関西 に解答例(answer.pdf)がアップされていますがそれの捕捉説明的なものです。前回と同様、配布資料(print.pdf)が手元にある前提で進めます。
Test::Unit 版とは書いた時期が違うので微妙に実装が違っていたりします。
ちなみに RSpec を使って書くのは初めてです。RSpec についてはるびまの記事を参照してください。
なお、stack_spec.rb は、そのとき注目している機能に関係のある部分のみ掲載します。
実装するメソッド
- empty?
- スタックが空なら true、そうでなければ false を返す。
- size
- スタックのサイズを返す。
- push(val)
- 引数の値をスタックの一番上に積む。
- pop
- スタックの一番上の値を取り除いて返す。スタックが空の場合は Stack::EmptyStackErrorが発生する。
Step1
- Stack#empty? のテスト
- 「新しいスタックの empty? は真」
Stack が空のときの動作を記述。
- spec -c で実行すると色つきで結果が表示される
- とりあえず Test::Unit 版と同じように Fake it してみた
Step2
- Stack#push と Stack#pop のテスト
- 「新しいスタックに 3 を push して pop すると 3 が返る」
- describe の引数に書いた内容を before のブロックに記述する
- it 〜 end に実際にチェックしたい内容を記述する
- after のブロックに後始末の処理を記述する
- before と after は省略可能
- Test::Unit 版と同じように Fake it
Step3
- Stack#size のテスト
- 「新しいスタックに 3 を push すると size は 1」
- Step2 と事前準備の内容は同じなので同じ describe ブロック内に it 〜 end を追加する
- 実装はひたすら Fake it
Step4
- Stack#size のテスト (2)
- 「新しいスタックに 3 を push すると size は 1」
- 「さらに 5 を push すると size は 2」
- 前のステップとは状況が違うので新しい describe ブロックを用意した
- Fake it のままでは通らないので、ちょっとまじめに実装。
Step5
- Stack#empty? のテスト (2)
- 「新しいスタックに 3 を push すると empty? は偽」
- 事前準備の状況が Step2, Step3 と同じなので同じ describe に振舞を追加
Step6
- Stack#pop のテスト (2)
- 「新しいスタックを pop すると Stack::EmptyStackError が発生する」
Step7
- Stack#pop のテスト (3)
- 「新しいスタックに 3 を push して 5 を push して pop すると size は 1」
Step8
- Stack#pop のテスト (4)
- 「新しいスタックに 3 を push して 5 を pushして pop すると 5 が返る」
Step9
最後にリファクタリングします。
- 上記の仕様を満たすように実装コードを書き換えます。
- 本来はちょっとずつ書き換えるべきですが、最終結果のみ書いておきます
- forwardable ライブラリを使用するとメソッドを指定して特定のオブジェクトに委譲できる
- 使用方法はリファレンスマニュアルを確認してください
Posted in Ruby | コメントはありません |
第20回 Ruby 勉強会 @ 関西
行ってきた。
内容は置いといて、初級者レッスンの解答例(answer.pdf)に補足説明を入れておく。 資料は上記サイトでダウンロードしてくださいな。
以下では、配布資料(print.pdf)が手元にあることを前提に進めていきます。
実装するメソッド
- empty?
- スタックが空なら true、そうでなければ false を返す。
- size
- スタックのサイズを返す。
- push(val)
- 引数の値をスタックの一番上に積む。
- pop
- スタックの一番上の値を取り除いて返す。 スタックが空の場合は Stack::EmptyStackErrorが発生する。
テスト駆動開発版
TDD でやってくのです。
Step1
- Stack#empty? のテスト
- 「新しいスタックの empty? は真」
ということなのでまずはテストを書きます。
@values の中身が Stack#pop しても消えませんね。これはスタックとしては拙いのでリファクタリングしましょう。
というわけで次回に続く。
Posted in Ruby | コメントはありません |