sironekotoroの日記

Perl で楽をしたい

ローカルCGI環境の構築で苦しむ

だから嫌だったんだ・・・

  • 結城先生の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,エラー」の単語を放り込んで記事を拾うことの繰り返しだったなぁ