【问题标题】:How to set production environment variables on heroku?如何在heroku上设置生产环境变量?
【发布时间】:2016-04-24 17:15:55
【问题描述】:

我想在 heroku 上使用 MySQL 运行一个应用程序。为此,我已经安装并配置了cleardb。我剩下要做的就是配置环境变量。但是,我找不到合适的方法来做到这一点。

article 中,Matt 解释了如何配置上述变量:

// 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?

【问题讨论】:

    标签: laravel heroku laravel-5 laravel-5.2 cleardb


    【解决方案1】:

    被标记为 Laravel 5.2,您需要在 .env 文件中设置环境变量。该文件不包含在版本控制中,因为您应该在每次安装时使用不同的版本。默认提供.env.example

    例如,如果您的网址是:

    CLEARDB_DATABASE_URL => mysql://adffdadf2341:adf4234@us-cdbr-east.cleardb.com/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' => '',
            ],
    

    【讨论】:

    • 感谢您的回答!您能否澄清以下问题? 1. 是否保证数据库的url不会被改变?否则硬编码凭据将不是一个好的解决方案。 2.动态解析url安全吗?
    • 其实它不是硬编码,因为它是一个配置文件,不需要和你的源文件一起去。如果数据库 URL 更改(如果您创建另一个数据库可能会更改),您可以在服务器中调整这些。您需要考虑的唯一问题是对性能的小幅影响,因为需要在每个请求上解析文件。解决方案是通过 Heroku CLI 定义这些相同的变量。
    【解决方案2】:

    在 Heroku 上设置环境变量非常简单。 您可以使用 Heroku CLI,如下所示: heroku config:set CLEARDB_DATABASE_URL="你的数据库 URL"

    您还可以通过 Heroku 仪表板轻松配置环境变量。

    【讨论】:

    • CLEARDB_DATABASE_URL 会在您安装 cleardb 后自动设置。问题是 - 如何使用该网址?
    猜你喜欢
    • 2017-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-29
    • 1970-01-01
    • 2021-07-30
    • 1970-01-01
    相关资源
    最近更新 更多