2

我将 MySQL 和 PHPMyAdmin 墨盒添加到我的 openshift php 应用程序中。添加 mysql 墨盒后,我看到页面显示:

Connection URL: mysql://$OPENSHIFT_MYSQL_DB_HOST:$OPENSHIFT_MYSQL_DB_PORT/

但我不知道这是什么意思。

当我通过 PHPMyAdmin 访问 mysql 数据库时,我看到 127.8.111.1 作为数据库主机,所以我配置了我的 symfony 2 应用程序(parameters.yml):

parameters:    
    database_driver:   pdo_mysql
    database_host:     127.8.111.1
    database_port:     3306
    database_name:     <some_database>
    database_user:     admin
    database_password: <some_password>

现在,当我访问我的网页时,它会抛出一个错误,我认为这与 mysql 连接有关。有人可以告诉我执行上述操作的正确方法吗?

编辑:似乎mysql连接工作正常,但不知何故

Error 101 (net::ERR_CONNECTION_RESET): Unknown error 

被抛出。

4

2 回答 2

2

我使用并且运行良好的代码可以使我的应用程序在 localhost 和 openshift 上运行,而无需每次在它们之间移动时更改数据库配置参数是这样的:

<?php
# app/config/params.php
if (getEnv("OPENSHIFT_APP_NAME")!='') {
    $container->setParameter('database_host', getEnv("OPENSHIFT_MYSQL_DB_HOST"));
    $container->setParameter('database_port', getEnv("OPENSHIFT_MYSQL_DB_PORT"));
    $container->setParameter('database_name', getEnv("OPENSHIFT_APP_NAME"));
    $container->setParameter('database_user', getEnv("OPENSHIFT_MYSQL_DB_USERNAME"));
    $container->setParameter('database_password', getEnv("OPENSHIFT_MYSQL_DB_PASSWORD"));
}?>

这将告诉应用程序,如果是 openshift 环境,它需要加载不同的用户名、主机、数据库等。

然后你必须从你的app/config/config.yml文件中导入这个文件(params.php):

imports:
    - { resource: parameters.yml }
    - { resource: security.yml }
    - { resource: params.php }
...

就是这样。当您在 openshift 或 localhost 上移动时,您将永远不必接触此文件或 parameters.yml。

于 2014-12-08T10:40:02.117 回答
0
Connection URL: mysql://$OPENSHIFT_MYSQL_DB_HOST:$OPENSHIFT_MYSQL_DB_PORT/

OpenShift 向您的应用程序公开环境变量,其中包含数据库的主机和端口信息。您应该在配置中引用这些环境变量,而不是硬编码值。我不是 Symfony 专家,但在我看来,您需要执行以下操作才能在您的应用程序中使用此信息:

为您的应用程序创建一个预启动挂钩并以 Symfony 的预期格式导出变量。将以下内容添加到应用程序的 git 存储库中的 .openshift/action_hooks/pre_start_php-5.3 文件中:

export SYMFONY__DATABASE__HOST=$OPENSHIFT_MYSQL_DB_HOST
export SYMFONY__DATABASE__PORT=$OPENSHIFT_MYSQL_DB_PORT

Symphony 使用此模式来识别环境中的外部配置,并将使此配置可用于您的 YAML 配置:

parameters:    
    database_driver:   pdo_mysql
    database_host:     "%database.host%"
    database_port:     "%database.port%"

编辑:

公开此信息以在 YAML 配置中使用的另一个选项是在您的 app/config/config.yml 中导入一个 php 文件:

imports:
    - { resource: parameters.php }

在 app/config/parameters.php 中:

$container->setParameter('database.host', getEnv("OPENSHIFT_MYSQL_DB_HOST"));
$container->setParameter('database.port', getEnv("OPENSHIFT_MYSQL_DB_PORT"));
于 2012-12-14T22:25:19.913 回答