0

我有一个 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 ) 的源代码中是一个符号链接,这可能就是它没有被创建的原因。但是我仍然对部署捆绑过程如何知道不存在的符号链接感到困惑。

非常感谢任何帮助!

4

2 回答 2

1

部署阶段似乎由 aws CLI 的 deploy push 命令处理,它无法处理损坏的符号链接。

我可以通过尝试使用 push 命令部署包含损坏的符号链接的应用程序来重现该问题:

(命令 - aws deploy push --application-name --s3-location s3:///.zip --source ./)(输出 - [Errno 2] 没有这样的文件或目录:'/path/to/source/ ')

我想您需要手动删除所有损坏的符号链接才能成功部署。

于 2016-02-03T22:34:10.267 回答
0

值得一提的是,这个 gem 后来被重构为不使用符号链接;从v1.3.0.

从当前版本 ( 1.1.4) 升级几乎可以肯定不需要更改代码。

于 2017-09-06T16:24:09.633 回答