每当在 Laravel AWS 管道中推送新版本时,我的环境都会被删除

Posted

技术标签:

【中文标题】每当在 Laravel AWS 管道中推送新版本时,我的环境都会被删除【英文标题】:My env gets deleted whenever new release is pushed in a Laravel AWS pipeline 【发布时间】:2021-08-14 02:40:42 【问题描述】:
    我在 AWS Elastic Beanstalk 上安装了一个 Laravel 项目 我在服务器上创建了一个环境 我运行php artisan key:generate 命令并填充了我所有的环境变量

这工作正常,我的应用程序启动。但是后来我通过 CI 管道在我的服务器上推送了一些其他工作,但它会自动删除 env 文件。

另外请注意,我已经在 .gitignore 中添加了我的环境,所以它不会推送我的环境。

我认为这是因为 Elastic Beanstalk 会在发布新版本时自动删除旧文件并创建新文件。

以下是我的 composer.json 脚本部分:

    "autoload": 
        "psr-4": 
            "App\\": "app/",
            "Database\\Factories\\": "database/factories/",
            "Database\\Seeders\\": "database/seeders/"
        
    ,
    "autoload-dev": 
        "psr-4": 
            "Tests\\": "tests/"
        
    ,
    "minimum-stability": "dev",
    "prefer-stable": true,
    "scripts": 
        "post-autoload-dump": [
            "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
            "@php artisan package:discover --ansi"
        ],
        "post-root-package-install": [
            "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
        ],
        "post-create-project-cmd": [
            "@php artisan key:generate --ansi"
        ]
    

【问题讨论】:

你在使用 Laravel 和 composer 吗?您是否收到以下错误:RuntimeException No application encryption key has been specified.?如果您正在使用 composer 密钥生成可能会通过post-create-project-cmd 或类似方式自动为您处理。 See here for more details 是的,此错误已显示,但由于 env 被删除,所以应用程序密钥自然也被删除。你能告诉我如何阻止 env 被删除吗? 你在使用composer吗?如果是这样,您能否更新您的问题以包含您的composer.json 文件的scripts 部分的示例?它应该包括一个类似于此的条目:"post-create-project-cmd": ["php artisan key:generate"]。 You can learn more about composer scripts here 是的,我在我的问题@dusthaines 中包含了我的作曲家文件脚本部分 【参考方案1】:

我发现我需要在每次发布新版本时创建环境,或者我可以在 AWS 提供的 ebextension config settings 中设置环境变量,所以我最终将环境变量设置为 ebextension 内的配置文件。

因此,每当您通过管道发送新版本时,该 env 被删除是正常的,因为它包含在 git ignore 中。

【讨论】:

以上是关于每当在 Laravel AWS 管道中推送新版本时,我的环境都会被删除的主要内容,如果未能解决你的问题,请参考以下文章

部署新版本时清除浏览器缓存

如何阻止数据在具有 Laravel 应用程序的 AWS 代码管道上被删除

使用 Laravel 的 AWS SNS 推送通知

AWS 中的 Laravel WebSockets 推送器

iOS 在提交新版本时更改价格

通过 Testflight 安装新版本时,NSUserDefaults 是不是仍然存在?