AWS Beanstalk Laravel 部署后挂钩没有这样的文件或目录

Posted

技术标签:

【中文标题】AWS Beanstalk Laravel 部署后挂钩没有这样的文件或目录【英文标题】:AWS Beanstalk Laravel post deploy hooks no such file or directory 【发布时间】:2021-05-08 19:53:23 【问题描述】:

我正在尝试将 laravel 应用程序部署到 aws beanstalk,操作系统是 Amazon Linux 2 AMI。

我已经设置了以下文件:

.ebextensions/01-deploy-script-permission.config

它包含以下代码:

container_commands:
    01-storage-link:
        command: 'sudo chmod +x .platform/hooks/postdeploy/post-deploy.sh'     

.platform\hooks\postdeploy/01-post-deploy.sh

它包含以下代码:

php artisan optimize:clear

部署失败并在 eb-engine.log 文件中出现以下条目

[ERROR] 执行命令 [app-deploy] 时出错 - [RunAppDeployPostDeployHooks]。停止运行命令。错误: 命令 .platform/hooks/postdeploy/post-deploy.sh 失败并出现错误 fork/exec .platform/hooks/postdeploy/post-deploy.sh:没有这样的文件或 目录

【问题讨论】:

【参考方案1】:

此答案适用于使用 Windows 将文件部署到弹性 beanstalk 的用户。

我花了 6 个小时宝贵的时间找到了这个信息。可能没有在官方文档中的任何地方记录

根据此链接“https://forums.aws.amazon.com/thread.jspa?threadID=321653”

psss:最重要的是文件用LF行分隔符保存。 CRLF 使“找不到文件或目录”

所以我使用 Visual Studio Code 将 .platform/hooks/postdeploy 中的文件的 CRLF 转换为 LF

在 VS Code 屏幕的右下方有一个小按钮 上面写着“LF”或“CRLF”:单击该按钮并将其更改为您的 偏好。

【讨论】:

【参考方案2】:

我不确定,但我认为您甚至在创建文件之前就运行了该命令,因此出现以下错误。

不久前,我遇到了同样的问题,我在 .ebextension 中编写了迁移命令,它曾经给我一个错误,因为我的 env 文件甚至还没有创建,因此没有建立数据库连接,所以我得到了错误。希望这会给你一个方向。 顺便说一句,我通过创建 env 然后通过管道推送这些命令来解决了这个问题。

【讨论】:

我有一个不同的问题,它与行尾有关:它不是任何地方的 AWS 文档中的文档,而是从社区中找到的:***.com/a/66047579/1550566

以上是关于AWS Beanstalk Laravel 部署后挂钩没有这样的文件或目录的主要内容,如果未能解决你的问题,请参考以下文章

“数据库主机数组为空。”在 AWS Elastic Beanstalk 上部署 Laravel 项目后

在 AWS Elastic Beanstalk 中部署后浏览 https 时,Laravel 资产、路由和 url() 不起作用

AWS Beanstalk 配置文件在部署时未执行

在 laravel 中部署 AWS Beanstalk 的模式

使用 EbCommands 部署 Laravel Aws Elastic-Beanstalk

AWS Beanstalk 使用 Grunt 任务部署 Laravel