流明如何缓存配置?

时间:2018-07-03 19:44:45

标签: lumen

我正在寻找如何使用流明执行等效的Laravel命令

php artisan config:cache

这似乎不是流明工匠的命令吗?

更新 我发现this related question 但这仅表示它不存在。

我目前在流明和DotEnv库读取.env文件中的快速请求方面遇到麻烦。这将导致无法读取.env文件,并且流明会使用其默认设置,该设置对我的应用程序不正确。

我很想将config:cache函数从laravel复制到我的lumen应用程序。这似乎不对吗?流明处理的方式是什么?

更新2 在研究了Lumen和Illuminate代码之后,似乎更可靠的方法是定义具有所需值的文件(例如config / database.php),而不使用.env文件?

1 个答案:

答案 0 :(得分:0)

您不必因问题而在Lumen中缓存配置。针对WAMP的dotenv问题有另一种解决方案(可能其他环境也受到了影响,请参见下面的第一个链接)。

您必须为.env变量赋予不同的名称,这些变量现在共享相同的名称。然后,您必须在各自的config/<configname>.php的文件中更改变量名称。示例如下。

示例

假设您在同一服务器下有两个应用程序,在虚拟主机(在WAMP下)下。一个应用程序是Lumen API A,另一个是Lumen API B。

问题来自以下事实:当HTTP请求到达被调用方时,调用方(API A).env变量不会被被调用方(分别为API B).env变量覆盖。但这仅当这些变量具有相同的名称时。

即您的调用方(API A).env变量正在内存中读取

DB_DATABASE=<api_a_1>
DB_USERNAME=<api_a_2>
尽管被叫被叫人.env文件具有如下所示的事实,但

将不会被被叫人的那一侧(API B)代替:

DB_DATABASE=<api_b_1>
DB_USERNAME=<api_b_2>

解决方案是使用不同的名称命名并将新名称放入config/database.php中。像这样:

API A

# .env file
API_A_DB_DATABASE=<api_a_1>
API_A_DB_USERNAME=<api_a_2>
// config/database.php file
...
// ... other keys
'connections'=> [
    // ... other keys
    'mysql'=> [
        'database' => env('API_A_DB_DATABASE', 'forge'),
        'username' => env('API_A_DB_USERNAME', 'forge'),
    ]
]

API B

如果API B也可以是此服务器中其他Lumen API的调用者,则可以保留默认变量名称或为它们分配前缀API_B_

现在,您无需在API A调用者端缓存配置,因为您的API B被调用者端变量由于名称不同而始终会被读入内存。

详细信息

我建议您阅读laravel/framework回购问题列表上的this explanation。如果呼叫者是Laravel应用,则您可以通过php artisan config:cache来解决同一问题,请参阅此SO帖子的详细信息。