• ベストアンサー

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

  • Perl
  • 回答数3
  • ありがとう数4

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

  • ベストアンサー
  • Ethersky
  • ベストアンサー率71% (168/235)
回答No.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を使うと無視されます。 (レジストリを読んで関連付けされているもので実行されるため)

aburafia
質問者

お礼

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

その他の回答 (2)

  • guci-ok
  • ベストアンサー率33% (49/146)
回答No.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環境では、シェバング(「#!」のこと)は意味を持たないので、何を書いても余り関係ないです。 余りと書いたのは、余り自信がないので・・・

aburafia
質問者

お礼

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

  • Ethersky
  • ベストアンサー率71% (168/235)
回答No.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;の後が投稿された内容通りで何も記されていないなら)ので「それで正常終了」しているかもしれません。

aburafia
質問者

お礼

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

関連するQ&A

  • perlからDBIを使用したpostgresへの接続でエラー

    perlからDBIを使用して、データベースにアクセスしたいと思っていますが、connectで下記のようなエラーが出力され接続できません。 ↓↓↓↓↓↓apacheのエラーログ↓↓↓↓↓↓↓ DBI connect('dbname=[mscdb]','[postgres]',...) failed: FATAL: database "[mscdb]" does not exist at /web/member/cgi-bin/dbitest.pl line 8 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ mscdbがないとエラーが出力されているように思いますが、mscdbは存在します。どういった原因が考えられるでしょうか? プログラムには以下のように記述しています。 #!/usr/bin/perl use DBI; use constant DBNAME => 'DBI:Pg:dbname=[mscdb]'; use constant DBUSER => '[postgres]'; use constant DBPASS => '[××××]'; DBI->connect( DBNAME, DBUSER, DBPASS, { AutoCommit => 0 }); print "Content-Type: text/plain\n\n"; print $DBI::errstr? $_: 'Done'; 環境は以下の通りです。    perl v5.8.2    postgres v8.1.2 vine linux dbd v1.49

    • ベストアンサー
    • Perl
  • DBD::Mysql が使用する標準のsocketはどこから得ているか?

    以下のようなスクリプトで、以下のようなエラーになっています。 port(socket)を指定しているにもかかわらず使用されない理由も分からないのですが、エラーメッセージのsocketはどこで設定されているのでしょうか? /etc/my.cnf で /tmp/mysql.sock を指定し、サーバーとクライアントは問題なく通信できています。 よろしくお願いします。 ■perlスクリプト ---------------------------------------- #!/usr/local/bin/perl use DBI; $user = 'usr'; $passwd = 'password'; $ds = 'DBI:mysql:db_name;host=localhost;port=/tmp/mysql.sock'; $db = DBI->connect($ds, $user, $passwd); (以下略) ■perlスクリプトのエラー ---------------------------------------- $ ./script_name.pl DBI connect('db_name;host=localhost;port=/tmp/mysql.sock','root',...) failed: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) at ./script_name.pl line 9 ■環境 ---------------------------------------- mysql:バイナリの(rpmでないやつ)4.0.24-standard OS:Linux 2.4.20-31.9(REDHAT) DBD:DBD-mysql-2.9004

    • ベストアンサー
    • Perl
  • perlからmysqlに接続できない

    #! c:/perl/bin/perl  use DBI; $user = 'root'; $passwd = 'パスワード'; $db = DBI->connect('DBI:mysql:db1:localhost', $user, $passwd); $sth = $db->prepare("INSERT INTO bunrui VALUES (1,'1st','memo')"); $sth->execute; $sth->finish; $db->disconnect; perlからmysql二接続するためDBIをインストールして、上のようなサンプルコードを実行してみたのですが Internal Server Error になってしまいます。どこかコードが違っているのでしょうか?

    • ベストアンサー
    • Perl
  • DBIを使用して物理的に分かれているPostgresに接続するには

    こんにちは。 WebサーバーとDBサーバー(postgres)があって、 WebのPerlプログラムからDBIを使用してのDB接続方法がわからなくて困ってます。 Webサーバーと同じPCにpostgreも入っている環境で動作してましたが、 DBサーバーを独立させることになったのですが connectの記述方法がわからないのです。 $dbh = DBI->connect("dbi:Pg:dbname=test", $user_name, $pass); 今まではこのような記述でOKでした。 しかし、今度は物理的に別れているので、 DBサーバーを指定するIPアドレスを記述する必要があるのかな、と思い (WebとDBサーバーはLANで直につながっています) $dbh = DBI->connect("dbi:Pg:dbname=test:host=XXX.XXX.XXX.XXX", $user_name, $pass); 等を試してみたのですがダメでした。 Webサーバー側のDBI・ドライバ設定は正しく動作しています。 (DBI->available_drivers;でドライバの列挙は正しく取得できているので) もちろんDBは正しく作成されています。 (DBサーバーで作ったユーザーは、DBログイン時にPassがいらない設定になってますが) 色々調べてみたのですが、IPアドレスを指定してのDB接続等の情報が どうしてもみつかりませんでした。 どなたかご存知の方、ぜひともご教授ください。

  • failed: Can't connect to local MySQL serverこのようなエラーがでて悩んでいます。

    cygwin上でperlの $db = DBI->connect("DBI:mysql:$dbname:$host", $user, $passwd); この文を実行しようとすると DBI connect('project:localhost','root',...) failed: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) このようなエラーがでて悩んでいます。/tmpにはmysql.sockが見当たりません。いろいろなサイトを見てみてmy.cofを書き換えるなどの対処法があったのですが、そのmy.cofすらどこにもありません。DBD::mysqlなどのモジュールは一応入ったみたいなんです。どのように対処したらよいでしょうか?

  • perlでpostgresを使えるようにしたい

    今までwindows2000でperl5.6とpostgresでDBIの構築をしていました。 昨今のセキュリティ事情を鑑みて、windowsXPにOSを入れなおし、Perlも5.10.0.1005にし、posgresも8.4.0にしようと思い立ちました。 perlはActivePerlです。 ActivePerlもpostgresもインストールしました。 ネットで検索したところ両者をつなぐにはDBIのモジュールが必要だとありました。 (2000の時は会社の人からファイルをもらってコピーしたので何も考えなくてもできました。その人とも疎遠になってしまって質問もできない状態です) モジュールを入れようと、binフォルダにあるppmをコマンドプロンプトから叩くと、エラーが出ます。 ppm gui failed: DBI connect('dbname=C:\DOCUME~1\ランカ~1\LOCALS~1\APPLIC~1/ActiveState/ActivePerl//ppm-MSWin32-x86-multi-thread-5_8.db','',...) failed: unable to open database file というエラーです。 すでにどこから手をつけていいのか、何をまずすべきかがわからなくなってしまいました。 ご教授いただければ幸いです。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • windowsでperlDBI+postgreSQL

    windowsでperlDBI+postgreSQLに挑戦しています。 今perl上からpostgreSQLに接続しようとしたところ エラーが出て接続できませんでした。 エラー内容は Can't locate DBI.pm in@INC というものでした。 いろいろ調べたのですがDBIモジュールがないのかな?と思い、 ネットでDBI-1.48というファイルを落としてきました。 解凍してみたのですが、今度はこれをどうインストールしてよいのかわからず 詰まってしまいました。 ちなみにエラーがでたperlの中身は *********************************************** #!/usr/bin/perl use DBI; # DBI モジュールを使えるようにします。 # 環境に応じて、各種情報をセットしておいてください。 $dbname = "template1"; $host = "127.0.0.1"; $user = "test"; $password = "pass"; $table = "testtable"; # データベースへの接続。ここで、Pg という名前の DBD を指定しています。 $conn = DBI->connect("dbi:Pg:dbname=$dbname;host=$host", $user, $password ); *********************************************** となってます。 助言をいただけませんでしょうか

    • ベストアンサー
    • Perl
  • postgres に接続できない

    PHP4とpostgrs8.0を利用しています。OSはWINDOWS2000です。 $DB_SERVER="localhost"; $Port = "5432"; $DB_NAME="test"; $DB_UID="postgres"; $DB_PASS="abc"; define("DB_CONECT","host=$DB_SERVER port=$Port dbname=$DB_NAME user=$DB_UID password=\"$DB_PASS\""); という設定で pg_connect(DB_CONECT) の接続でエラーが発生します。 Warning: pg_connect(): Unable to connect to PostgreSQL server: FATAL: password authentication failed for user "postgres" in c:\*****.php on line 12 なぜでしょうか? pg_hba.confの設定で host all all 127.0.0.1/32 md5 を host all all 127.0.0.1/32 trust に変更すると接続できるのですが。 それは問題ないのでしょうか? またレンタルサーバーのpostgresを利用する場合、 その設定も個人で変更できるのでしょうか? よろしくお願い致します。

    • ベストアンサー
    • PHP
  • perl >> DBI >> DBD >> oracle8でエラー

    perlからDBI経由でoracleに接続したいのですが、 なぜか DBI->connectのところで失敗して下記のようなエラーが出ます。 `CONNECT ERROR ORA-1034: ORACLE not available oas userでtelnetで入り、直接perl scriptを起動すると問題なく動作するの ですが、なぜかOAS経由でブラウザーからCGIとしてcallすると 失敗するのです。 もう2日も悩んでます。 どなたか原因がわかりましたらご教授ください。 ---- 環境 --- perl 5.005_03 OAS 4.0.8.1 DBI 1.30 DBD-Oracle 1.12 OS solaris2.6 接続先DBは別のsolarisマシンに入ってる。 ----------------ソース----------------------------- #!/usr/local/bin/perl use DBI; $dsn = 'DBI:Oracle:orcl'; $user = 'testuser'; $password = 'testuserpass'; $dbh = DBI->connect($dsn, $user, $password) or die "接続できません"; my $sth = $dbh->prepare("select * from munec"); $sth->execute; while(@row = $sth->fetchrow_array) { print "@row\n"; } ---------------

  • DBI DBD::Pg 等のPerlモジュール・ドライバのインストールについて

    はじめまして。 Perlが稼動するWebサーバーと Postgreが稼動するDBサーバーと物理的に2台に分けた サーバー環境上での質問です。 DBI DBD::Pg Net::SMTP という3つをインストールしようと思うのですが、 どれをどちら(WebかDBか)のサーバーに 入れてよいのか判別がつきません。 (今まで1つのサーバー上で稼動させていた事がありますが) 理屈で考えれば、Perl上で動かすものだから すべてWebサーバーにインストールすればいいような気がする のですが・・・。 どなたかご存知の方、ぜひ教えてください。

専門家に質問してみよう