环境变量和工匠不在生产服务器上工作
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
。
运行migrate
或db: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 不在生产服务器上工作,但在本地工作