まず環境です。
-----[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でもいいのでお教え下さい。
よろしくお願いします。
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;の後が投稿された内容通りで何も記されていないなら)ので「それで正常終了」しているかもしれません。
回答ありがとうございます。
>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 を終了します。 ご不便をおかけして申し訳ありません。」
とうい文句のウインドウです。
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環境では、シェバング(「#!」のこと)は意味を持たないので、何を書いても余り関係ないです。
余りと書いたのは、余り自信がないので・・・
回答ありがとうございます。
>どこのサイトからインストールしましたか?
http://theoryx5.uwinnipeg.ca/ppms/
からインストールしました。
pgfoundryからインストールしなおしてみるのも手かもしれません。
>余りと書いたのは、余り自信がないので・・・
私も他のスクリプトでC:/の表記をしなかったので問題ないかなとおもって
とくに変更しませんでした。
ただ、もしもを考えて、C:/表記にして実行したのですが、やはり強制終了します。
他の方の回答にもかきましたが、強制終了はwindowsでアプリケーションが強制終了されたときにでるウインドウが表示されます。
「問題が発生したため、Perl Command Line Interpreter を終了します。 ご不便をおかけして申し訳ありません。」との文句があります。
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を使うと無視されます。
(レジストリを読んで関連付けされているもので実行されるため)
ありがとうございます!解決しました。
ならびに、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
できあがり。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) laravel 本番環境でメールが送れません。 1 2023/02/17 17:57
- MySQL PHP 画像のアップロード Qiita 2 2022/11/28 04:44
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- MySQL データベースの複製の仕方(mysql) 2 2023/05/30 18:24
- Perl #!/usr/bin/perlで書きだしたCGIをサーバーにアップしていますが反応しません 4 2023/08/22 23:29
- PHP PHP一覧表示した項目にリンクをはりたい 1 2023/07/12 17:08
- Windows 7 Windows7でMicrosoft VirtualPC2007 SP1を使用する 9 2022/11/17 13:12
- MySQL 「掲示板のログイン画面」はPHP~MySQLに「データベース認証のシステム」方式です。 1 2022/09/27 05:00
- PHP php エラー 2 2022/10/23 16:43
- UNIX・Linux postfix smtpサーバーリレーがTLSハンドシェーク失敗 1 2022/08/15 15:45
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「デバイスは PRN を初期化でき...
-
#!/usr/bin/perlで書きだしたCG...
-
bad interpreter:エラーについて
-
LCD ディスプレイを Raspberry ...
-
VBAでoutlook365が起動しません。
-
Excel VBA 定義されたプロージ...
-
Excel VBAで、ユーザーフォーム...
-
ArduinoのジャイロモジュールMP...
-
Excel VBA 標準モジュール内で...
-
エクセルVBAでシートモジュール...
-
VBAで別モジュールへの変数の受...
-
VBAで2重のDoLoop関数から抜け...
-
BASP21使用のメール送信でコマ...
-
VBAのバージョン管理
-
GOSUB命令とは
-
CGI::Carpを使っているのにInte...
-
Excel VBAで、ユーザーフォー...
-
pythonでファイル移動できません。
-
Excel VBA 『Call』で呼び出す...
-
現在アクティブなフォーム名を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「デバイスは PRN を初期化でき...
-
#!/usr/bin/perlで書きだしたCG...
-
「Perl Command Line InterPret...
-
DBD-ODBCのインストールができ...
-
Perlの実行パスを自動で変更す...
-
【超初心者】異なるディレクト...
-
ActivePerlでWindows上のパスを...
-
「jcode.pl」というファイルは...
-
activeperlでDBD-Pgを扱うと、p...
-
初心者 CGIがうまく表示できな...
-
cpan2rpmでlibwww-perlをインス...
-
Excel VBAでリンク切れをチェッ...
-
Excel VBA 定義されたプロージ...
-
例外処理のフローチャートの記...
-
ArduinoのジャイロモジュールMP...
-
ユーザー定義関数に#NAME?が返...
-
VBAで別モジュールへの変数の受...
-
Excel VBA 『Call』で呼び出す...
-
エクセルVBAでシートモジュール...
-
LCD ディスプレイを Raspberry ...
おすすめ情報