最近 .htaccess をいじることが多いんですが, 融通効かないなと思うことが多々あります.

.htaccess を Ruby で書くことができれば… ということでとりあえずプロトタイプ程度ですが作ってみました.

DSL の記述例

これが以下のように出力されます.

<IfModule mod_rewrite.c>
  RewriteEngine on
  <Limit GET>
    RewriteRule ^/user/(.*)$ /user.cgi?id=$1 [L,R]
  </Limit>
</IfModule>
Order Deny,Allow
Deny from All
Allow from 192.168.0.11
Allow from 192.168.0.12
Allow from 192.168.0.13
Allow from 192.168.0.14
Allow from 192.168.0.15

この .htaccess 自体はあまり気にしないでください.
DSL の構文を紹介するために適当に書いてます.

この DSL を実行するのに必要なプログラム, 使い方は以下の Gist をご覧ください.
DSL to write .htaccess files.

特徴

  • Ruby で書ける
    Ruby なので, Range オブジェクトや, その each メソッドを用いて, ループが書けます.
  • あらゆるディレクティブをメソッドとして記述できる
    RewriteEngine や Order といったディレクティブは, 引数をひとつ受けるメソッドとして実行されます.
    内部的には, method_missing で処理されています.
  • Ruby のコードブロックが使える
    上記の例でいう IfModule メソッドのようにブロック引数を渡すと, <IfModule> ~ </IfModule> というように出力されます.
    また, ブロックのネストにも対応しています.

あくまでもプロトタイプなので, 全然実用レベルでは無いですが, 洗練させればなかなかおもしろいものになるんでしょうか.

DSL を作るためのノウハウが足りないので, いいアイディアをお持ちの方は, 是非 @yuya_takeyama まで教えてください.
とりあえずは dsl { ~~~ } を省略できるようにしたい…

Web エンジニアであれば, Apache のアクセスログを tail -f で流しながら確認することは多いのでは無いでしょうか.
通常は白黒で非常に見づらいと思いますが, 以下の記事を参考に, カラフルにしてみました.

RubyでANSIカラーシーケンスを学ぼう! (hp12)

今回用意したコードはこちら.

shebang を合わせてもたった 4 行です.
こちらはログフォーマットに依存するので, ご注意ください.
combinedvhost_combined といったログフォーマットを前提としています.

以下のようにして使用します.

$ tail -f /var/log/apache/path_to_access_log | ./colorize.rb

実際の使用例は, 右の画像の通りです.
(このブログのアクセスログです. IP 等は枠外にはみ出させました.)
tail -f なので, このようなログがずっと流れてきます.

私の場合は, リクエストメソッド, リクエストパス, ステータスコードに色付けしています.

上記の記事では HighLineTermColor といった gem を利用していますが, 私の場合はこのワンライナーの正規表現で十分だったので, それで済ませてしまいました.
それぞれの用途によっては, さらなるカスタマイズや, より一般化されたツール化なども考えられると思いますが, とりあえず一例として.

あとはこれを, 以下のような less の使い方に対応させる方法があればいいのですが, 私がやった限りはわかりませんでした…

less の tail -f モード的な何か (YoshioriのBlog)

どなたか, いい方法があれば是非教えてください…
それでは今日はここまで.

これまでは XREA の有料ホスティングを利用していましたが、さくら VPS に移行しました。

この移転にあたって、大体以下のような作業を行っています。

  • さくら VPS 契約
  • OS は Ubuntu 10.04 (32bit) をインストール
  • ログインを公開鍵方式に限定して sshd を起動
  • ufw でファイアウォールの構築
  • aptitude や tasksel などで LAMP 環境の構築
  • WordPress 最新版をインストールし、テスト環境に
  • Git をインストール
  • テスト環境を Git リポジトリにチェックイン
  • RVM をインストール
  • WordPress 用とは別に Redmine 用ユーザーを作成し
  • Redmine 用ユーザーに RVM で Ruby 1.8.7 をインストール
  • Redmine 用ユーザーに Redmine をインストール
  • Redmine にブログ用のプロジェクトを作成
  • Redmine に、ブログ移転のために必要なタスクをチケットとして登録
  • Git リポジトリを Redmine と連携
  • Postfix をインストール
  • Redmine の更新が、Postfix を通じてメール通知されるように変更
  • 必要そうな WordPress プラグインをインストール
  • Apache を mod_proxy でリバースプロキシ化
  • munin をインストール
  • Mysql にスロークエリログが出力されるよう設定
  • 旧サーバーから WordPress の記事をエクスポート
  • 新サーバーに WordPress の記事をインポート
  • 本番環境用の VirtualHost を作成
  • テスト環境から git pull し、本番環境の構築
  • /etc/hosts を書き換え、擬似本番テスト
  • DNS の A レコードをさくら VPS のものに切り替え

大体こんな感じです。順番は必ずしもこの通りではありませんが。

さくら VPS では root 権限がもらえるので、いろいろインストールできるし、 Apache や MySQL についても細かく設定・監視ができるので楽しいです。 XREA のときにはできなかったような、より実践的なサーバー運用を学んで、このブログにも残していければと思います。