ruby – 如何通过gitlab CI / CD在CloudFront上推送Jekyll网站时修复“s3_website”问题?

我在 GitLabs中创建了Pipeline,我使用docker作为gitlab-runner.我想在s3网站上推送Jekyll网站.为此,我使用的是s3_website gem.我的管道中定义了4个阶段.我正在构建Jekyll,使用Gulp创建工件,在我的jekyll网站上执行测试然后部署.

所有步骤都正常,但在进行部署时,我遇到了以下错误.我无法弄清楚如何解决这个问题.

[fail] Could not load the site: Failed to parse ERB in /builds/myproject/s3_website.yml:
       (SyntaxError) /usr/local/lib/ruby/site_ruby/2.4.0/rubygems/core_ext/kernel_warn.rb:15: Syntax error,unexpected tLABEL
           module_function define_method(:warn) {|*messages,uplevel: nil|

当我不在Docker上时,它在我的本地机器上运行得非常好.但是当我尝试使用docker做同样的事情时.它给了我上面的错误.

我在我的docker机器上用ruby 2.3,2.4,2.5,2.6尝试过它.但是没有运气.

bundle exec s3_website push

我希望这可以在S3存储桶和相应的cloudfront上部署该站点.

任何线索将不胜感激.

解决方法

我们在CircleCI上遇到了同样的错误.如果我理解正确的话,s3_website gem包含了一个使用JRuby 1.7的Java .jar,并且其中一个必须在Docker镜像或Ruby gems中发生变化,导致它开始继承系统的Ruby 2路径.因此,它的JRuby 1.7尝试加载仅在Ruby 2.0及更高版本中工作的Ruby gem,因此它会遇到错误.

作为一种解决方法,我不是让s3_website gem调用.jar文件本身,而是告诉s3_website gem只下载.jar文件,然后我手动调用它:

bundle exec s3_website install
java -cp $(bundle show s3_website)/*.jar s3.website.Push

我在s3_website项目的GitHub页面上的reported this.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...