こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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でもいいのでお教え下さい。
よろしくお願いします。

投稿日時 - 2006-11-28 00:38:08

QNo.2566907

困ってます

質問者が選んだベストアンサー

> あれ?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を使うと無視されます。
(レジストリを読んで関連付けされているもので実行されるため)

投稿日時 - 2006-11-29 00:25:18

お礼

ありがとうございます!解決しました。
ならびに、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

できあがり。

投稿日時 - 2006-11-30 22:46:43

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

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環境では、シェバング(「#!」のこと)は意味を持たないので、何を書いても余り関係ないです。
余りと書いたのは、余り自信がないので・・・

投稿日時 - 2006-11-28 22:25:42

お礼

回答ありがとうございます。

>どこのサイトからインストールしましたか?
http://theoryx5.uwinnipeg.ca/ppms/
からインストールしました。
pgfoundryからインストールしなおしてみるのも手かもしれません。

>余りと書いたのは、余り自信がないので・・・
私も他のスクリプトでC:/の表記をしなかったので問題ないかなとおもって
とくに変更しませんでした。
ただ、もしもを考えて、C:/表記にして実行したのですが、やはり強制終了します。
他の方の回答にもかきましたが、強制終了はwindowsでアプリケーションが強制終了されたときにでるウインドウが表示されます。
「問題が発生したため、Perl Command Line Interpreter を終了します。 ご不便をおかけして申し訳ありません。」との文句があります。

投稿日時 - 2006-11-28 23:32:32

ANo.1

> -----[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;の後が投稿された内容通りで何も記されていないなら)ので「それで正常終了」しているかもしれません。

投稿日時 - 2006-11-28 04:54:46

お礼

回答ありがとうございます。

>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 を終了します。 ご不便をおかけして申し訳ありません。」
とうい文句のウインドウです。

投稿日時 - 2006-11-28 23:22:41

あなたにオススメの質問