職場実習15日目

今日はレビューをする日。にもかかわらず、作業があまり進んでいない。
暇を見て、自宅のWindowsPerlをインストールして、ソースを移植しようと試みてたものの、CPANでモジュールを導入する途中でgccのパスが認識されないエラーに見舞われたり、Perlの実行ファイルのパスがCentOSと違うためにソースを書き換えないとWebサーバ上で動かなかったり、POSIXモジュールの仕様が違っていて、ローカル時間の表記が時差ではなく地名になっているせいでPostgreSQLのタイムスタンプに使えなかったりと、CentOS上で作ったスクリプトが思うように動かなくなるトラブルに見舞われ、対応させるための作業で、日曜日は1日の大半を費してしまった。
そうして、とうとうタイムリミットの月曜日が来た。

画像アップロード

色々なサイトを調べたが、どのサイトのスクリプトを参考にしてもエラーが無くならないので、試しにサンプルをそのまま実行してみたところ、エラーが出たのと上手く行ったのがあった。上手く行ったソースと、自分のソースの違いをよく確かめ、CGIモジュール以外の何かがCGIモジュールのエラーを引き起こしているらしいところまで掴めたので、画像アップロード処理を行う箇所を可能な限り、サンプルと同じ条件にするため、ソースをメソッドに分割し、別々のファイルにした後、それぞれのファイルで必要最小限のモジュールのみを呼び出す形にしたところ、やっと上手くアップロードできた。
CGIモジュール、CGI::Sessionモジュール、CGI::Carpモジュール、File::Copy、File::Basenameは画像アップロードの妨げにならない事が分かり、CGIモジュールとEncodeモジュールを併存させ、utf8プラグマをセットしている時にCGIモジュールでのエラーが引き起こされるという事も分かった。(おそらく原因はutf8だろうか。)
日本語処理にはutf8は必須でほぼ全てのソースに使っており、SQLデータを受け取る場所や、フォームデータを受け取る場所はEncode::Guessモジュールが必要となり、日本語を全く使わない箇所があまりないので、それらの処理から画像アップロードだけを隔離するのに苦労した。
multipartデータをCGIモジュールで受け取る際、極力utf8宣言をしたソース上で行わないようにしたほうがいいと思う。つまり、フォーム入力を受け取るcgiがある場合、画像ファイルを受け取る箇所だけを切り離すのではなく、他のデータ(文字列)を受け取る箇所も別に切り離し、大元のソース上では関数呼出と、多バイト言語を使わない処理のみを残さないといけないようである。面倒くさい。

アップロードしたファイルをサイト上で読み込む

保存したファイルのアクセス権限は666にすべきという事が分かった。ファイルの所有者はサーバー(Apacheを使ってる場合はapache)なので、保存した後にchmodでアクセス権限を変えて置かないと、後から開けなくなるからだ。

レビューの結果

ところどころ未完成でバグだらけのまま、途中経過を発表する形となり、画像アップロードに失敗(アクセス権限エラー)したり、JavaScriptで作った動的な処理が動かなかったりと散々であった。
何をやりたかったかは説明できたものの、欲張り過ぎて発想に技量が追い付いていないという苦言を頂いた。

次はGrailsの学習に入るので、Perlでのサイト作成はここで終了。
まずはGrailsで何ができるかを学び、今回の教訓を生かして、何を作りたいかというアイデアを練るのは一旦仕切り直しとする。

仕様の練り方

仕様を練るには絵に描いてみて、何回も描き直してみるといいと、社員の山本さんから教えてもらった。
何度も見直してみて、番号を振ったりする事で、作りたいものを部品化して、どこから作ればいいのか、どのくらいなら無理なく作れるのかが見えてくるらしい。

Java, Grailsのインストール

JavaCentOSに始めから入っているものではなく、SunのJava SDK 1.5を使うので、一旦Javaをアンインストールしてから、Sunのサイトからダウンロードしたものを入れる。

Javaをアンインストール

erase java 1.6.0

ダウンロードしたJavaパッケージを解凍

su
(パスワード)
cd Desktop
./jdk-1_5_0_20-linux-i586-rpm.bin

次に、.bash_profileに次の行を挿入し、javaコマンドを使用可能にする。

PATH=$PATH:$HOME/bin
# (中略)
# ここから
export JAVA_HOME=/usr/java/jdk1.5.0_20
export PATH=$PATH:$JAVA_HOME/bin
# ここまで
# (中略)
export PATH

そして、一旦ログアウトすれば、javaは動くようになる。
次に、GrailsのサイトからGrailsのtar.gzファイルを入手し、解凍する。

tar zxvf grails-bin-1.1.1.tar.gz

解凍後のフォルダごと、/optフォルダに移動する(root権限が必要)。
その後、Javaと同様に.bash_profileに次の行を挿入する。

PATH=$PATH:$HOME/bin
# (中略)
# ここから
export GRAILS_HOME=/opt/grails-1.1.1
export PATH=$PATH:$GRAILS_HOME/bin
# ここまで
# (中略)
export PATH

そして、一旦ログアウトすれば、grailsも動くようになる。
これでインストールは終了。