环境变量和工匠不在生产服务器上工作

Posted

技术标签:

【中文标题】环境变量和工匠不在生产服务器上工作【英文标题】:Environment variables and artisan not working on production server 【发布时间】:2014-10-23 12:11:12 【问题描述】:

我正在使用 Github 将我的网站部署到我的生产服务器。因此,我不想存储所有 .env.*.php 文件,所以它们都在我的 .gitignore 中。

在每个环境目录中,我将数据库配置设置为使用getenv(),例如:

<?php

'connections' => array(

    'mysql' => array(
        'driver'    => 'mysql',
        'host'      => getenv('DB_HOST'),
        'database'  => getenv('DB_NAME'),
        'username'  => getenv('DB_USERNAME'),
        'password'  => getenv('DB_PASSWORD'),
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
    ),


),

);

然后我进入虚拟主机的 apache conf 文件并设置环境变量,如下所示:

SetEnv DB_HOST ***.***.***.***
SetEnv DB_NAME database
SetEnv DB_USERNAME databaseuser
SetEnv DB_PASSWORD databasepass

这一切都可以在生产服务器上完美运行。

但是,我现在只是手动导入了数据库,而不是使用php artisan migrate,因为它不起作用。

我知道它不起作用,因为它没有命中 apache,因此没有设置变量,但我尝试了多种方法来尝试解决这个问题,但我还没有运气.

我尝试过强制环境查看是否可以使用php artisan --env=production migrate获取变量

我还尝试通过运行php artisan env 来检查它是否使用了正确的环境,并且它使用的是正确的生产环境。

我的下一个想法是在生产服务器上手动创建一个 .env.production.php 文件。我创建了一个并使用了 getenv() 以防万一它像这样工作,但发生了同样的错误,所以我尝试手动设置变量而不使用 getenv(),但我仍然没有运气。

任何想法都将不胜感激。

【问题讨论】:

生产 .env 文件被称为 .env.php 而不是 .env.production.php 我已经在 bootstrap/start.php 中设置了一个名为“production”的环境,这还是不行吗? 我刚刚尝试了 .env.php 文件,如果我手动设置变量,它可以工作,有什么办法可以使用通过 apache 设置的变量来与 artisan 一起工作?跨度> 我不太确定,我从来没有使用过 apache 来设置这些变量。使用这些文件并在 .gitignore 中忽略它们要容易得多。 使用artisan 时,您无法访问来自 apache 的任何内容,因为 artisan 通过命令行运行,因此未设置这些环境变量。 【参考方案1】:

你应该使用laravel docs中描述的.env.php文件。

要在生产环境中设置环境变量,请在项目根目录中使用名为 .env.php 的文件:

<?php

# .env.php

return array(

    'DB_HOST' => 'localhost',
    'DB_NAME' => 'my_database',
    'DB_USER' => 'user_name',
    'DB_PASS' => 'super-secret-sauce',

);

对于不同的环境,您使用不同的 .env 文件。例如,在本地环境中,您将使用.env.local.php,而对于测试,您将使用.env.testing.php

运行migratedb:seed 等手工命令时,您可以使用--env= 选项指定环境。

例如$ php artisan db:seed --class=UsersTableSeeder --env=testing

【讨论】:

.env 文件仅适用于 laravel 5。他使用的是 laravel 4 @RichardTorcato: .env.*.php 文件适用于 laravel 4。.env 文件适用于 laravel 5。最简单的区分方法是 L4 中的 env 文件是 php 文件。此外,我在文档中指向的链接是 Laravel 4 特定的。

以上是关于环境变量和工匠不在生产服务器上工作的主要内容,如果未能解决你的问题,请参考以下文章

使用本地、纱线工作区依赖项和生产环境(例如 App Engine)环境变量构建?

角度|使用生产环境变量启动测试服务器

Laravel Sanctum 不在生产服务器上工作,但在本地工作

Mailform 在本地工作,但不在生产环境中(Heroku、Rails)

Laravel 工匠优化最佳实践

Vue.js 使用不同的环境变量构建