だから嫌だったんだ・・・
- 結城先生のPerl本の付録「CGIプログラミング」をやる為に、ローカル(MacbookAir)で環境構築
- そしてはまる
やったことなど
- 環境は MacOSX 10.8 MountainLion
- /private/etc/apache2/users に「ログインユーサ名.conf」ファイルを作る
<Directory "/Users/ユーザ名/Sites/">
Options All
AllowOverride All
Order allow,deny
Allow from all
AddHandler cgi-script .cgi
</Directory>
- ホームディレクトリにSitesというフォルダを作る
- Terminalで
sudo apachectl start
- Sitesの中に適当なindex.htmlをおいて、ブラウザから
http://127.0.0.1/~ユーザー名/index.html
で表示確認
- 適当なCGIを置く
#!/usr/bin/env perl
print "Content-Type: text/plain\n\n";
print "hello\n";
print "$]\n"
$]
というのはPerlの特殊変数で利用しているPerlのバージョンを返してくれる。
- ここで、シバンを
#!/usr/bin/env perl
にしてたら、システムperl(5.12)を利用していることが判明。
- 2時間くらいかけてCGIから、plenvでインストールしたperl(5.16)を利用する為の解決法を探す
- which perl だと
/Users/ユーザー名/.plenv/shims/perl
となるが、これをシバンに設定してもエラーになる
[Sun Feb 09 12:52:31 2014] [error] [client 127.0.0.1] (8)Exec format error: exec of '/Users/ユーザ名/Sites/test.cgi' failed
[Sun Feb 09 12:52:31 2014] [error] [client 127.0.0.1] Premature end of script headers: test.cgi
- でも、
/Users/ユーザー名/.plenv/shims/perl -v
ってやるとちゃんと5.16のバージョンがかえってくる
- 頭を抱えていろいろ試行錯誤したり、回り道を探したりする
- 結局、plenvでwhichつかって掘り出したperlの場所を、シバンに設定したらちゃんと動いてくれた。
$ plenv which perl
/Users/ユーザー名/.plenv/versions/5.16.3/bin/perl
- これをシバンに設定したら、ちゃんと5.16のPerl使ってくれるようになりました。ありがたやありがたや。
#!/Users/ユーザー名/.plenv/versions/5.16.3/bin/perl
途中
- CGIは本の付録だし、Webに公開するときはWAF使うんだから、CGIやらなくていいじゃーん
- ・・・という誘惑の声に3分に1回くらい負けそうになったことを書いておく
- ひたすらgoogle様に「perl,plenv,envシバン,Apache,CGI,エラー」の単語を放り込んで記事を拾うことの繰り返しだったなぁ