【问题标题】:Laravel php artisan key:generate in productionLaravel php artisan 密钥:在生产中生成
【发布时间】:2023-01-28 17:36:17
【问题描述】:

在我的生产服务器上,我设置了环境变量APP_ENV=production。使用此配置,laravel 将不会使用 .env 文件,但会使用在服务器上声明的 env var。

但是当我运行这个命令 php artisan key:generate 时遇到了问题,因为我会得到这个错误:

In KeyGenerateCommand.php line 96:
                                                                               
  file_get_contents(/app/.env): failed to open stream: No such file or directory

只是为了这个命令 laravel 需要 .env 文件。所以实际上我创建了一个空的 .env 文件来让它工作但是它很难看......

你有什么解决办法吗?或者这个命令在生产环境中没用?

【问题讨论】:

  • 不使用 .env 文件在 Laravel 中并不常见,所以 yes php artisan key:generate 对你来说毫无用处。
  • @apokryfos 我测试了在没有这个命令的情况下运行我的应用程序但是我得到了一个错误Class 'Barryvdh\Debugbar\ServiceProvider' not found
  • 您确实需要以某种方式生成密钥。在临时 .env 文件上本地生成它并将结果添加到您的生产环境配置中就可以了

标签: php laravel


【解决方案1】:

当您将 Laravel 项目推送到生产环境时,您需要生成一个 .env 文件,因为该文件未提交。你应该有一个.env.example,你可以根据需要复制修改:

cp .env.example .env

然后你可以运行php artisan key:generate来设置App Key。

【讨论】:

  • 感谢您的回答,好的,因此需要获取 .env 文件。这个 .env 文件会覆盖我在服务器上设置的环境变量吗?
  • 可能,但根据我的经验,服务器上的 env 变量应该只来自这个 .env 文件。它们通过各种 config/{file}.php 文件加载到 Laravel 中。是的,.env 文件几乎总是必需的。完全可以在没有 .env 文件(或空文件)的情况下运行 Laravel,但你必须硬编码一切进入这些文件,这是一个很大的安全问题,因为这些文件默认情况下会提交到存储库。
  • 实际上我在 Cloud Run 上运行,它是无服务器的,所以我只能使用 Cloud Run 中声明的环境变量。所以我无法在服务器上创建 .env 我必须使用来自 Cloud Run 的环境变量。这就是为什么我使用 APP_ENV=production 从服务器使用环境变量。因此,如果没有 .env 就无法执行 php artisan key:generate,我将创建一个空的 .env,谢谢
  • 啊明白了。我见过类似的东西,不是 CloudRun,而是带有 Secrets Manager 的不同应用程序。我们处理这个问题的方法是有一个部署步骤,从这些秘密中写入 .env 文件,但如果您在运行时(或通过服务器变量等)定义它们,那也可以。干杯!
【解决方案2】:

你也可以运行这个:

sudo php artisan key:generate

在执行此操作之前,请确保您位于该文件夹中,例如:

cd /var/www/html/your_folder

【讨论】:

    猜你喜欢
    • 2018-08-10
    • 2017-12-22
    • 2020-01-01
    • 2016-07-17
    • 2011-05-08
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多