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如何缓存配置?的主要内容,如果未能解决你的问题,请参考以下文章

透过ATS缓存配置看如何判断HTTP资源是否可缓存方法论

透过ATS缓存配置看如何判断HTTP资源是否可缓存方法论

透过ATS缓存配置看如何判断HTTP资源是否可缓存方法论

在Hibernate中如何配置二级缓存。

如何清除SharePoint Server 配置缓存

如何阻止 Laravel 5 缓存配置?