2016-04-16 57 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后自动设置。问题是 - 如何使用该网址? –