2016-04-16 89 views
1

我想在heroku上運行一個使用MySQL的應用程序。爲此,我已經安裝並配置了cleardb。我只剩下要做的就是配置環境變量。但是,我找不到適當的方法來做到這一點。
如何在heroku上設置生產環境變量?

在此article,馬特介紹如何配置所提到的變量:

// config/database.php 

$url = parse_url(getenv("CLEARDB_DATABASE_URL")); 

$host = $url["host"]; 
$username = $url["user"]; 
$password = $url["pass"]; 
$database = substr($url["path"], 1); 

// . . . 

'mysql' => array(
    'driver' => 'mysql', 
    'host'  => $host, 
    'database' => $database, 
    'username' => $username, 
    'password' => $password, 
    'charset' => 'utf8', 
    'collation' => 'utf8_unicode_ci', 
    'prefix' => '', 
), 

而且他還表示:

如果你實際上是在一個真實的現場工作,你應該確保 你只是編輯數據庫憑證專門爲你的 生產環境

那麼,在生產中如何配置環境變量以便在heroku上使用cleardb運行MySQL?

回答

4

被標記爲Laravel 5.2,您需要在.env文件中設置環境變量。該文件不包含在版本控制中,因爲每個安裝應該有不同的版本。 A .env.example是默認提供的。

舉個例子,如果您的網址是:

CLEARDB_DATABASE_URL => mysql://adffdadf2341:[email protected]/heroku_db?reconnect=true 

然後在.env文件,你可以把:

DB_CONNECTION=mysql 
DB_HOST=us-cdbr-east.cleardb.com 
DB_PORT=3306 
DB_DATABASE=heroku_db 
DB_USERNAME=adffdadf2341 
DB_PASSWORD=adf4234 

,離開config/database.php不變。

另一種解決方案是在.env文件中定義上面的URL,並按建議動態解析它。請注意,這些變量可以使用env("CLEARDB_DATABASE_URL")進行訪問。

編輯

由於CLEARDB_DATABASE_URL自動設置,它可能會更好地利用它。

// config/database.php 

if ($url = env('CLEARDB_DATABASE_URL', false)) { 
    $parts = parse_url($url); 
    $host = $parts["host"]; 
    $username = $parts["user"]; 
    $password = $parts["pass"]; 
    $database = substr($parts["path"], 1); 
} else { 
    $host = env('DB_HOST', 'localhost'); 
    $username = env('DB_USERNAME', 'forge'); 
    $password = env('DB_PASSWORD', ''); 
    $database = env('DB_DATABASE', 'forge'); 
} 

// ... 
     'mysql' => [ 
      'driver' => 'mysql', 
      'host' => $host, 
      'database' => $database, 
      'username' => $username, 
      'password' => $password, 
      'charset' => 'utf8', 
      'collation' => 'utf8_unicode_ci', 
      'prefix' => '', 
     ], 
+0

謝謝你的回答!你能否澄清以下問題? 1.是否保證數據庫url不會被更改?否則,對證書進行硬編碼並不是一個好的解決方案。和2.動態解析URL的安全? –

+0

實際上,它不是硬編碼,因爲它是一個配置文件,不需要使用源文件。如果數據庫URL更改(它可能會創建另一個數據庫),則可以在服務器中對其進行修改。您需要考慮的唯一問題是性能下降,因爲需要在每個請求上解析文件。解決方法是通過Heroku CLI定義這些相同的變量。 – BeS

0

在Heroku上設置環境變量非常簡單。 您可以使用Heroku的CLI,如下: Heroku的配置:設置CLEARDB_DATABASE_URL =「您的DB URL」

你也可以很容易地通過Heroku的儀表盤配置環境變量。

+0

CLEARDB_DATABASE_URL會在您安裝cleardb後自動設置。問題是 - 如何使用該網址? –