Openshift Perl脚本无法连接到MYSQL

时间:2014-06-07 18:19:38

标签: perl openshift

不好意思不得不向你问这个开心机的人,但是Perl不会连接到MySQL,尽管PHP做得很好。

以下代码在客户端上运行正常(我在本地计算机上添加了OPENSHIFT env变量)但在Openshift应用程序上失败:

my $db_name = 'campaignmotor';
my $db_host = $ENV{'OPENSHIFT_MYSQL_DB_HOST'};
my $db_port = $ENV{'OPENSHIFT_MYSQL_DB_PORT'};
my $db_pw = $ENV{'OPENSHIFT_MYSQL_DB_PASSWORD'};
my $db_user = $ENV{'OPENSHIFT_MYSQL_DB_USERNAME'};

sub db_connect {
    my $dsn = "DBI:mysql:database=$db_name;host=$db_host;port=$db_port";
    my $dbh = DBI->connect($dsn, $db_user, $db_pw);
    return $dbh;
}

我收到的消息如下: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

在我的网络应用程序上进行PHP配置后,工作正常:

$db['default']['hostname'] = getenv('OPENSHIFT_MYSQL_DB_HOST') . ':'
                             . getenv('OPENSHIFT_MYSQL_DB_PORT');
$db['default']['username'] = getenv('OPENSHIFT_MYSQL_DB_USERNAME');
$db['default']['password'] = getenv('OPENSHIFT_MYSQL_DB_PASSWORD');
$db['default']['database'] = 'campaignmotor';

mysql,mysqldump等都在命令行上工作。

这是一个HAProxy PHP应用程序

奇怪的是我没有OPENSHIFT_MYSQL_DB_SOCKET变量。本主题中的大多数帮助程序线程都引用了它。

提前致谢!

1 个答案:

答案 0 :(得分:0)

科里 - 谢谢!

  

在上面的shell命令中,为主机指定-h选项,否则,它会尝试使用套接字。

我还要补充你需要指定端口,因为在HAProxy模式下,MySQL运行在非标准端口号上。我添加了-h和host以及-P和端口,它可以工作!

我可能偶然发现了这个问题,除非直接在shell上运行时该命令按预期工作,即使没有指定端口号和主机。怪异!

再次感谢!