0

私はこのスクリプトを持っています:

#!/var/home/cherry/opt/perl

use Test::More;
use DBI;
use Test::mysqld;
use Data::Dumper;

my $mysqld = Test::mysqld->new(
    base_dir => '/tmp/test_mysqls',
    my_cnf => {
        'skip-networking' => '', # no TCP socket
    }
) or plan skip_all => $Test::mysqld::errstr;

my $dbh = DBI->connect(
    $mysqld->dsn(dbname => 'test'),
);

warn Dumper($mysqld);

done_testing();

これを実行すると、次の出力が得られます。

prove -lv t/test.t
t/test.t .. $VAR1 = bless( {
                 '_owner_pid' => 21854,
                 'base_dir' => '/tmp/test_mysqls',
                 'pid' => 21918,
                 'mysql_install_db' => '/usr/bin/mysql_install_db',
                 'auto_start' => 2,
                 'my_cnf' => {
                               'tmpdir' => '/tmp/test_mysqls/tmp',
                               'pid-file' => '/tmp/test_mysqls/tmp/mysqld.pid',
                               'skip-networking' => '',
                               'datadir' => '/tmp/test_mysqls/var',
                               'socket' => '/tmp/test_mysqls/tmp/mysql.sock'
                             },
                 'mysqld' => '/usr/sbin/mysqld'
               }, 'Test::mysqld' );

1..0

テストが完了しません。スクリプトは改行を永遠に待機し、終了することはありません。ps aux を実行すると、ctrl + c を実行した後でも、mysqld のインスタンスが実行されていることがわかります。この問題のトラブルシューティングをどこから始めればよいかさえわかりません。ヒントはありますか?

4

1 に答える 1

0

do {} を追加し、eval {} 内で $mysqld->stop を呼び出して、mysqld をシャットダウンしてみてください。

my $mysqld = Test::mysqld->new(
    base_dir => '/tmp/test_mysqls',
    my_cnf => {
        'skip-networking' => '', # no TCP socket
    }
) or do {
    eval { $mysqld->stop };
    plan skip_all => $Test::mysqld::errstr;
};
于 2012-06-22T21:00:54.197 に答える