【问题标题】:Laravel Artisan - reload .env variables or restart frameworkLaravel Artisan - 重新加载 .env 变量或重启框架
【发布时间】:2017-03-13 18:38:03
【问题描述】:

我正在尝试编写一个命令作为构建项目的快速入门。该命令要求输入数据库详细信息,然后更改 .env 文件。问题是该命令之后需要进行一些数据库查询,但是 .env 变量没有重新加载。

我的问题是,有没有办法重新加载或覆盖 .env 变量运行时。如果没有,有没有办法新鲜地调用另一个 Artisan 命令,让框架再次启动?

在我的命令中,我尝试在实际命令中执行$this->call('build:project'),但即使在第二次调用中,变量也不会重新加载。

有没有办法在不让用户手动调用多个命令的情况下实现这一点?

谢谢!

【问题讨论】:

  • 你能添加一个改变 .env 文件的命令的 sn-p 吗?
  • 这是一个简单的 str_replace 文件:file_put_contents(base_path('.env'), str_replace($from, $to, file_get_contents(base_path('.env'))));

标签: php laravel laravel-artisan


【解决方案1】:

我在重新加载 .env 变量时遇到了同样的问题,我用这个命令行修复了它,它允许你清除配置:

php artisan config:clear

希望对您有所帮助。问候。

【讨论】:

  • 你是如何重新加载 .env 变量的?
【解决方案2】:

Laravel 使用配置文件从 .env 文件中获取数据。所以,你可以做的是在运行时override configuration values

config(['database.default' => 'mysql']);

【讨论】:

  • 似乎不起作用。我更改了.env 文件,然后执行config(['database.username' => $dbuser]); 并调用$this->call('migrate'); 并仍然收到错误SQLSTATE[HY000] [1045] Access denied for user 'forge'@'localhost',即使我没有输入forge 并且它不是在.env 文件中(默认情况下在database 配置)。
  • @Giedrius,因为没有 databade.username 属性。试试这个:config(['database.connections.mysql.username' => 'root'])
  • 我的坏,冲进去了!这工作得很好,迁移现在正在运行,谢谢。
  • 很高兴它有帮助。 )
  • 我遇到了同样的问题,但它不起作用:(我正在将database.connections.sqlsrv.databasedatabase.connections.pgsql.databasedatabase.connections.mysql.databasedatabase.connections.sqlite.database 设置为新值,然后事件打印整个配置() 它清楚地表明配置是新的,但是当我运行this->call('migrate') 时,我仍然在尝试使用默认数据库而不是我的新数据库:(
【解决方案3】:

尝试清除缓存对我有帮助(无法 ssh 进入服务器)

生产服务器上是否有 {app route}/bootstrap/cache/config.php 文件?删除它。

这对我有帮助

【讨论】:

    【解决方案4】:

    作为 OP,我正在尝试通过运行控制台命令并在过程中间询问数据库凭据来引导 Laravel 项目构建。

    这是一个棘手的问题,我读过的任何内容都无法解决它:重置配置、缓存、Dotenv 重新加载等...似乎一旦初始化控制台命令/操作,初始数据库连接就会一直保持到结束。

    我找到的工作解决方案是绕过,在数据库修改完成后,通过使用本机 shell exec 命令并将 php artisan 命令作为参数传递给这个缓存状态:

    passthru('php artisan migrate');
    

    所以,顺序是:

    1. php artisan project:build(或任何你的控制台命令)
    2. 提示用户输入数据库凭据
    3. 替换 .env 文件中的值(您的搜索和替换算法)
    4. 运行php artisan config:cache
    5. passthru('php artisan migrate'); ro 运行你的迁移

    shell_exec 会做同样的事情,但在静默模式下,而passthru 将返回控制台生成的输出。 https://www.php.net/manual/en/function.passthru.php

    在 Laravel 8.52 上成功完成

    【讨论】:

      猜你喜欢
      • 2020-03-26
      • 2016-10-17
      • 2018-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-11
      • 2010-09-08
      • 2022-11-18
      相关资源
      最近更新 更多