【问题标题】:Conflict between config variables配置变量之间的冲突
【发布时间】:2017-04-26 08:33:09
【问题描述】:

我的服务器中有五个即时的 laravel,不同的 nginx 配置工作正常

我还使用 redis 队列发送消息,在生产环境中,我使用 php artisan config:cache 缓存了 env 变量,我使用 config('app.url') 而不是 env(app.url)

但是当我想从 project1 发送带有队列的消息时,在消息中显示来自项目 4 的一些变量,并且当我运行 php artisan config:clear 时工作正常

但我不想直接使用 .env 变量,我想在生产环境中使用缓存配置的变量

我也使用了下面的命令,但不起作用:

 php artisan cache:clear
 php artisan route:clear
 php artisan queue:restart
 composer dump-autoload
 composer dump-autoload -o
 php artisan optimize

这是我的 .env 文件:

  APP_ENV=produnction
  APP_DEBUG=true

  APP_URL=http://name.com/api/v1.0

  APP_DOMAIN=project1
  APP_NAME_FA=project1
  APP_NAME_EN=project1

我该如何解决?

【问题讨论】:

  • 您可以发布.env 文件吗?您可以为变量使用不同的名称,PROJECT1_URL 等。
  • 有没有办法不改变变量?
  • 次要修复是 production 而不是 produnction
  • 我可以给变量添加前缀吗?我的意思是在项目中仍然使用config('app.url'),但是当我添加前缀时我使用config(prefix.app.url) ..你认为这解决了问题吗?

标签: php laravel redis laravel-5.2 queue


【解决方案1】:

是的,您必须进行更改,您可以使用一个 Laravel 应用程序托管多个域,但 .env 将是每个应用程序一个,这就是您获得相同值的原因。

您可以尝试为每个项目创建多个 Laravel 应用程序,并使用自己的配置.env

使用一个 Laravel 应用程序处理多个域,并在一个 .env 中为每个项目使用不同的变量名。

解决此问题的另一种方法是在 config 目录下创建一个自定义配置文件,并将您想要的任何内容放在那里并使用config helper。

-更新

当你使用env时要小心,当你使用config时..env()会先查看.env,然后config会查看config目录。

例如。 env('PREFIX_APP_URL') 将在 .env 中查找 PREFIX_APP_URL

config('prefix.app.url') 将在配置目录文件中查找嵌套数组以查找prefix 文件以查找数组

return array(
 'app'=>array(
    'url'=>'...value..'
 )
)

【讨论】:

  • 我可以给变量添加前缀吗?我的意思是在项目中仍然使用config('app.url'),但是当我添加前缀时我使用config(prefix.app.url) ..你认为这解决了问题吗?
【解决方案2】:
php artisan config:clear

php artisan cache:clear 

php artisan config:cache

如果您在部署期间使用 config:cache 命令,则必须确保仅从配置文件中调用 env 函数,而不是从应用程序中的其他任何地方调用。

如果您从应用程序中调用 env,强烈建议您将正确的配置值添加到配置文件中,然后从该位置调用 env,从而允许您将 env 调用转换为配置调用。

阅读https://github.com/laravel/framework/issues/21727的整个线程

【讨论】:

    猜你喜欢
    • 2021-07-23
    • 1970-01-01
    • 2011-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    • 2016-07-13
    • 1970-01-01
    相关资源
    最近更新 更多