ウェブ雑記

tushuhei が奮闘する日記

ZendFramework奮闘記Vol.1【mod_rewriteに泣く】

Introduction

「いっちょうフレームワークやるか!」ということでZend Frameworkに挑戦することに。
戦友はMacbook Air 11inch (Mac OS X 10.6.7)、mac標準装備のapache, phpと、サイトから新たにインストールしたmysql
CodeZineの特集などを参考にしながら、インストール、Hello, World!アプリケーションの作成まではサクサクと進んだ(と思い込んでいた)のですが、その後すぐに様子がおかしいことに気づきました。
Hello, WorldアプリケーションはcontrollersディレクトリのIndexAction.phpとviewsディレクトリのindex/index.phtml, hello.phtmlを使って作成しました。順調にパラメータの受渡しもできました。
しかし、新しくHeloAction.phpとhello/index.phtmlを作成してモジュールを設けて、localhost/zendapp/hello/indexにアクセスした時、なんと404 Not Foundが返されました。
実はこのとき、URLを司るナイフ、mod_rewriteが有効になっていなかったのです・・・!

ローカル編

まず、ローカルのMacbook Air側で行った設定についてです。
mod_rewrite を使いこなす (初級) part2-nia.noteを参考にしました。
これに加えて、独自に行なった設定は以下です。

httpd.confの"DocumentRoot"を"/User/ユーザ名/Sites"にする

初期設定が"/Library/WebServer/Documents"だったので、シンボリックリンクで対処していたのですが・・・。

/private/etc/apache2/users/ユーザ名.confの"AllowOverride"をAllにする

Making Mod Rewrite and htaccess work on Mac OS x Scribbleによると、ユーザ名.confも絡んでるようなので、見てみると、あるではありませんか!これも"AllowOverride All"に。

Options Allを追記

これらの作業を進めると、どんなにchmodコマンドを駆使しても403 Forbiddenが出てくることがあります。(私は出てきました笑) RewriteEngine On が動作しない!によると、Optionsをいじる必要があるみたい。

これらの設定を加えてようやく、

動きました\(^^)/

リモート編

ローカルと同様にまずmod_rewriteがあるかを調べるのですが、うちのサーバ(Apache2.2.14)では"httpd -M"ではなく、"apache2 -M"というコマンドでうまくいきました。
そして順調にリストが出るかと思いきや、こんなメッセージが。

[warn] module rewrite_module is already loaded, skipping
Syntax error on line 5 of /etc/apache2/httpd.conf:
AllowOverride not allowed here

なんと。httpd.confに文法エラーがあると言ってきました。
実際に見てみると、なんと直打ちでAllowOverride Allと書いてある。
AllowOverrideはタグで囲まないと使用できませんヽ(`Д´)ノ
ということで、これはコメントアウト。使用するアプリケーションのDirectoryタグを作って中に"Options All"と"AllowOverride All"を中に書きました。rewriteアプリケーションならこんなかんじ。


Options All
AllowOverride All
Order allow,deny
Allow from all

このように書き換えて再び "apache2 -M"コマンドを打って、rewrite_moduleがあることを確認(さっきの警告文であるって言ってたけど笑)して、ローカル編と同様にOptionsとAllowOverrideを変更していけば・・・

動きました\(^^)/

注意

必ずhttpd.confなどの設定ファイルを変更したらapacheを再起動しましょう!これを忘れて「あれ、変わらないなぁ・・・」とやってると更に泥沼にハマるハメに!

課題

apachectl restartでガンガン再起動していたが、あんまりよくないのかもしれない・・・。Gracefulにすべきだったか。
http://httpd.apache.org/docs/2.2/ja/stopping.html

独り言

最近エディタで範囲選択するときにShift+vする癖が付いてきました・・・。vim癖w

Mac OS Xを非対応のプリントサーバに繋いでゴニョゴニョするの巻

Introduction

職場の印刷環境では
プリンタ:CANON MP500
プリントサーバ:LPV3-U2S
を使っています。

今までは、有線で繋がっているWindows機を使って印刷していたのですが、
最近学生エンジニアの数が
1人→2人→4人→8人
と綺麗に指数関数型で増えてきたので、プリンタをネットワークで共有して使おうという事になりました。

が、プリントサーバのサポートページを見てみると、

ということで、まずOS Xにユーティリティソフトがインストール出来ない。

じゃ、プリントサーバ本体はどうなってんの

なんかそれらしき型番ないし、あったとしてもドライバ不要みたいだし。
ここから無線でmacから印刷をするための戦いが始まります。

まず、プリントサーバのIPアドレスを把握する

今回は、すでに有線でつながっているWindows機のユーティリティソフトからプリントサーバのIPアドレスを確認しました。

↑タスクバーの右端(通知領域)にアイコンを発見して、起動。
「情報」の「IPアドレス」の欄を見る。

設定ページにアクセスする。

上で確認したIPアドレスをブラウザに入力して、設定ページにアクセスする。
http://192.168.*.***/
的な感じで入力!
ユーザ名とパスワードを聞かれたら、随時入力する。
(初期設定ならユーザ名:root, パスワード:空白でだいたい行けます・・・)

プリンタ名を確認する

設定ページ左のサイドバーの「管理設定」→「システム情報」より、プリンタ名(ポート名)を確認する。今回は「P1」とします。

ドライバをインストールする。

今回はGutenprint Printer Driversを使用しました。公式サイトでMac OS X用をダウンロード、インストール。
※Gutenprint Printer DriverはプリンタドライバがないOS向けに提供しているオープンソースドライバらしいです。

OS Xに設定を加える。

いよいよ、OS Xのシステム環境設定をいじっていきます。

「システム環境設定」→「プリントとファクス」→プリンタ欄の追加ボタンをクリックする

下図のように欄を埋める。

プロトコルはIPPを選択。アドレスはプリントサーバのIPのアドレス、キューはプリンタ名を記入。名前・場所は適当に記入。ドライバは「プリンタソフトウェアを選択」から、つなぐプリンタの機種のドライバを選択。

Finale

そして何か適当な資料上で設定したプリンタを選んで印刷すると、印刷出来た!
意外と大変でした。。。