Lumen如何缓存配置?
Posted
技术标签:
【中文标题】Lumen如何缓存配置?【英文标题】:Lumen how to cache the config? 【发布时间】:2018-12-12 04:46:41 【问题描述】:我正在寻找如何使用 Lumen 执行等效的 Laravel 命令
php artisan config:cache
这似乎不能作为 Lumen artisan 命令使用?
更新 我找到了this related question 但这只是说它不存在。
我目前在 lumen 和 DotEnv 库读取 .env 文件以快速请求时遇到问题。这会导致 .env 文件不被读取,并且 lumen 使用其默认设置,这对我的应用程序不正确。
我对将 config:cache 函数从 laravel 复制到我的 lumen 应用程序感到犹豫。这似乎不对?流明的处理方式是什么?
更新 2 在深入研究 Lumen 和 Illuminate 代码之后,似乎一种更可靠的方法是定义具有所需值的文件(例如 config/database.php),而不是使用 .env 文件?
【问题讨论】:
您好,您的问题有更新吗?现在,我似乎遇到了同样的问题,您是否创建了 config/database.php 文件?问候。 是的,刚刚创建了config/database.php文件 我添加了 $app->configure('database');在我的 bootstrap/app.php 和文件 config/database.php 中并没有工作,我遗漏了什么?感谢您的支持。 我不需要 $app->configure('database')。基本上,我只是没有 .env 文件。相反,我只是将 config/database.php 中的生产值硬编码为 env() 调用的默认选项。幸运的是,对于我的简单应用程序,我使用的是本地 sqlite,因此我不需要存储数据库密码。 【参考方案1】:您不必为您的问题在 Lumen 中缓存配置。对于 WAMP 的dotenv
问题有不同的解决方案(可能其他环境也会受到影响,请参阅下面的第一个链接)。
您现在必须为共享相同名称的.env
变量指定不同的名称。然后您必须更改各自config/<configname>.php
文件中的变量名称。示例如下。
示例
假设您在同一服务器下有 2 个应用程序,不同的虚拟主机(在 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>
不会被被调用者的(API B)端替换,尽管事实上被调用者被调用者.env
文件具有这样的它们:
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 被调用方变量将始终被读入内存,因为它们具有不同的名称。
详情
我建议阅读this explanation 上的laravel/framework
回购问题列表。如果调用者是 Laravel 应用程序,您可以通过 php artisan config:cache
解决相同的问题,请参阅此 SO 帖子的详细信息。
【讨论】:
以上是关于Lumen如何缓存配置?的主要内容,如果未能解决你的问题,请参考以下文章