- ベストアンサー
activeperlでDBD-Pgを扱うと、perlが強制終了する
まず環境です。 -----[os環境]---------------- windows xp sp2 -----[active perlバージョン]- This is perl, v5.8.7 built for MSWin32-x86-multi-thread -----[cpan環境]-------------- ppm> properties DBI ppm> properties DBD-Pg で結果表示あり(インストール済みと判断) -----[PostgreSQLの環境]------ psql -U postgres -h localhost bookmark ユーザ postgres のパスワード:postgres ログイン可能でDB環境正常と判断。 の環境で、以下のスクリプトを実行すると、perlが強制終了します。 ------[test.pl]-------- #! /usr/bin/perl use DBI; $dbname = "worple"; $user = "postgres"; $passwd = "postgres"; $host = "localhost"; #DBオープン $db = DBI->connect("DBI:Pg:host=$host;dbname=$dbname", $user, $passwd) || die "DBI connect failed : $DBI::errstr"; #DBクローズ $db->disconnect; 1; ---------------- エラーメッセージがでることもなく、googleでも似た症状を探せないでいます。 何かヒントや、参考のURLでもいいのでお教え下さい。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> あれ?helpで確認したところ存在していますよ。 こちらのActivePerlは 5.8.8(Build819)ですが 「Unrecognized ppm command」となってしまいます。 PPMがGUIになったことで5.8.8からは廃止されたのかもしれません。 (helpにも見当たらないので) > 「問題が発生したため、Perl Command Line Interpreter を終了します。 ご不便をおかけして申し訳ありません。」 ひょっとするとDBD-Pgのコンパイル時に使われたVCランタイムまたは使用時に使われるOpenSSLのライブラリがないために異常終了しているかもしれません。 No2の回答にあるPgFoundryから DBD-Pg-1.49-5.8s.tar.gz を落として試してください。 なお、DBD-Pg-1.49-5.8.tar.gzにはOpenSSLのDLLが添付されていませんので[s]の付いている方で試してください。 > Windown環境では、シェバング(「#!」のこと)は意味を持たないので、何を書いても余り関係ないです。 CGIとして使用する場合は意味をもちます。(Windowsをサーバーとした場合でも) サーバープログラム(例えばApache)がここを見てインタプリタに渡しますから。 なお、Apacheでもhttpd.confでScriptInterpreterSource Registryを使うと無視されます。 (レジストリを読んで関連付けされているもので実行されるため)
その他の回答 (2)
- guci-ok
- ベストアンサー率33% (49/146)
ActiveStateのサイトにDBD-Pgは無かったはずですが、 どこのサイトからインストールしましたか? 私の場合は、以下のサイトのものが動きました。 http://pgfoundry.org/projects/dbdpgppm/ > これはCPANではなくPPMですよね? > ですがPPMにpropertiesというコマンドはなかったと思いますが何をされたのでしょうか? このPCも、v5.8.7 なんですが、少なくともv5.8.7 のppmにはあるみたいですよ。 > もしくは1行目のパスが#! /usr/bin/perlだから。Windown環境ならPerlのパスが/から始まることはありえないので。例 #!C:/perl/bin/perl Windown環境では、シェバング(「#!」のこと)は意味を持たないので、何を書いても余り関係ないです。 余りと書いたのは、余り自信がないので・・・
お礼
回答ありがとうございます。 >どこのサイトからインストールしましたか? http://theoryx5.uwinnipeg.ca/ppms/ からインストールしました。 pgfoundryからインストールしなおしてみるのも手かもしれません。 >余りと書いたのは、余り自信がないので・・・ 私も他のスクリプトでC:/の表記をしなかったので問題ないかなとおもって とくに変更しませんでした。 ただ、もしもを考えて、C:/表記にして実行したのですが、やはり強制終了します。 他の方の回答にもかきましたが、強制終了はwindowsでアプリケーションが強制終了されたときにでるウインドウが表示されます。 「問題が発生したため、Perl Command Line Interpreter を終了します。 ご不便をおかけして申し訳ありません。」との文句があります。
- Ethersky
- ベストアンサー率71% (168/235)
> -----[cpan環境]-------------- > ppm> properties DBI > ppm> properties DBD-Pg これはCPANではなくPPMですよね? ですがPPMにpropertiesというコマンドはなかったと思いますが何をされたのでしょうか? > 以下のスクリプトを実行すると、perlが強制終了します。 このスクリプトはCGIとして動かされたのでしょうか? そうなると、ブラウザに対して何かしら吐いてる内容がないのでそれでエラーになったのではないですか?(もしくは1行目のパスが#! /usr/bin/perlだから。Windown環境ならPerlのパスが/から始まることはありえないので。例 #!C:/perl/bin/perl) (ちなみに「エラー」というのは500 Interneal Server Errorですか?) サーバー(例 Apache)のエラーログを確認してください。 CGIではなく、スクリプトとして「perl test.pl」というようにcmd(コマンドプロンプト)から実行してエラーが出ない場合は普通にdisconnect後に何か出力しているわけではない($db->disconnect;の後が投稿された内容通りで何も記されていないなら)ので「それで正常終了」しているかもしれません。
お礼
回答ありがとうございます。 >PPMにpropertiesというコマンドはなかったと思いますが あれ?helpで確認したところ存在していますよ。 >このスクリプトはCGIとして動かされたのでしょうか? 環境書きもれすみません。コマンドから実行しています。 >何か出力しているわけではない -----以下のように変更して実行しました。 #!C:/perl/bin/perl use DBI; $dbname = "worple"; $user = "postgres"; $passwd = "postgres"; $host = "localhost"; print "start"; #DBオープン $db = DBI->connect("DBI:Pg:host=$host;dbname=$dbname", $user, $passwd) || die "DBI connect failed : $DBI::errstr"; print "dbopened"; #DBクローズ $db->disconnect; print "dbclosed"; 1; ----- やはり強制終了します。普通に終了するのではなく、 windowsでよくアプリケーションが強制終了される画面が表示されます。 「問題が発生したため、Perl Command Line Interpreter を終了します。 ご不便をおかけして申し訳ありません。」 とうい文句のウインドウです。
お礼
ありがとうございます!解決しました。 ならびに、guci-okさんもありがとうございます。 >こちらのActivePerlは 5.8.8(Build819)ですが こちら、どうしてもパスに日本語を入れなければならなく、 どうやらPPM4ではパスにマルチバイト文字が入ると動かないバグが あるらしく、PPM3である、5.8.7パックにしています。 PPMのバージョンも書けばよかったかな? >No2の回答にあるPgFoundryから >DBD-Pg-1.49-5.8s.tar.gz >を落として試してください。 全てuninstallして、再度installしたのですが、 ほぼコレが解決の決め手でした。 OpenSSLのライブラリが無いのが原因なのか、5.8バージョンではなく5.6用 を入れてしまったのが原因か、今では解りません、、、、 私の様にへっぽこな人用にinstallの手順を書いておきます。 (http://pgfoundry.org/projects/dbdpgppm/を rep addしてしまう馬鹿も要るかもしれませんから。私の事です。笑) ------- [1]ダウンロード http://pgfoundry.org/projects/dbdpgppm/から DBD-Pg-1.49-5.8s.tar.gz DBD-Pg-5.8s.ppd をダウンロードし、適当にフォルダを作り保存します。 [2]インストール cd c:\xxxx C:\xxxx>ppm install DBD-Pg-5.8s.ppd できあがり。