我有一个 Ruby 应用程序,该应用程序已通过 CircleCI 使用 CodeDeploy 部署到 AWS 实例。 我向应用程序添加了一个 gem。 所有测试都在本地和 CircleCI 中通过,但部署阶段失败并显示此错误:
$ create_application_revision /tmp/codedeploy_applications.json /tmp/codedeploy_revisions.json
create_application_revision loaded: {"applications":[{"application_root":"/","region":"us-west-2","revision_location":{"revisionType":"S3","s3Location":{"bucket":"something","key":"etl-scripts-testdeploy-3a050b1"}},"deployment_group":"EtlScriptsFleet","application_name":"EtlScripts"}]}
Bundling EtlScripts from /home/ubuntu/etl-scripts
Unhandled exception
[Errno 2] No such file or directory: '/home/ubuntu/etl-scripts/vendor/bundle/ruby/2.2.0/gems/regexp-examples-1.1.4/db/unicode_ranges_2.1.pstore'
确实该文件不存在。 它在本地也不存在,但所有测试都通过。 我只是无法弄清楚为什么部署过程认为它需要这个文件?
我注意到在这个 gem (https://github.com/tom-lord/regexp-examples/tree/master/db) 的源代码中是一个符号链接,这可能就是没有创建它的原因。 但我仍然对部署捆绑进程如何知道不存在的符号链接感到困惑。
任何帮助非常感谢!
部署阶段似乎由 aws CLI 中的部署推送命令处理,它无法处理损坏的符号链接。
我可以通过尝试使用 push 命令部署包含损坏符号链接的应用程序来重现该问题:
(命令 - AWS 部署推送 --应用程序名称 --s3-location s3:///.zip --source ./)(输出 - [错误 2] 没有这样的文件或目录:"/路径/到/源/")
我想您需要手动删除所有损坏的符号链接才能使部署成功。
值得一提的是,这个 gem 后来被重构为不使用符号链接; 截至v1.3.0
.
从当前版本(1.1.4
)升级几乎肯定不需要更改代码。