2012-12-14 47 views
2

我將MySQL和PHPMyAdmin盒式磁帶添加到我的openshift php應用程序中。 後MySQL的筒柱添加我看到它說的頁面:在使用Symfony 2的Openshift上使用MySQL

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

,但我不知道是什麼意思。

當我通過phpmyadmin訪問mysql數據庫, 我看到127.8.111.1爲DB主機,所以我配置我的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 

被拋出。

回答

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

OpenShift暴露環境變量包含數據庫主機和端口信息,您的應用程序。您應該在配置中引用這些環境變量,而不是硬編碼值。我不是Symfony的專家,但是在我看來,爲了在您的應用中使用這些信息,您需要執行以下操作:

爲您的應用程序創建預啓動鉤子並以Symfony的預期格式導出變量。下面添加到.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 uses this pattern to identify external configuration in the environment,並且將提供使用的這種配置在YAML配置:

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

編輯:

另一種選擇公開這個信息在YAML配置用途是導入一個PHP文件在您的應用程序/配置/ config.yml:

imports: 
    - { resource: parameters.php } 

在應用程序/配置/ parameters.php:

$container->setParameter('database.host', getEnv("OPENSHIFT_MYSQL_DB_HOST")); 
$container->setParameter('database.port', getEnv("OPENSHIFT_MYSQL_DB_PORT")); 
+1

它說:你已經請求了一個不存在的參數「database.host」。 – synergetic

+0

您能否提供更多關於您採取哪些步驟的信息? –

2

我使用,效果非常好,使我的應用程序的工作都在本地主機和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。