Я создал Pipeline в GitLabs и использую docker как gitlab-runner. Я хочу продвинуть сайт Jekyll на сайт s3. И для этого я использую гем s3_website. В моем конвейере определены 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. Это дает мне ошибку выше.
Я пробовал это с Ruby 2.3, 2.4, 2.5, 2.6 на моем докере. Однако не повезло.
bundle exec s3_website push
Я ожидаю, что это развернет сайт в сегменте S3 и соответствующем облачном интерфейсе.
Любая подсказка будет оценена по достоинству.
🤔 А знаете ли вы, что...
Ruby обладает сильной системой типов, но при этом переменные не требуют объявления типов.
Мы столкнулись с той же ошибкой на CircleCI. Если я правильно понимаю, гем s3_website является оболочкой для Java .jar, использующего JRuby 1.7, и что-то должно быть изменено в одном из образов Docker или драгоценных камнях Ruby, из-за чего он начинает наследовать системный путь Ruby 2+. В результате его JRuby 1.7 пытается загрузить драгоценные камни Ruby, которые работают только в Ruby 2.0 и выше, поэтому он сталкивается с ошибками.
В качестве обходного пути вместо того, чтобы позволить гему s3_website вызывать сам файл .jar, я говорю гему s3_website загружать только файл .jar, а затем вызываю его вручную:
bundle exec s3_website install
java -cp $(bundle show s3_website)/*.jar s3.website.Push
Я сообщил об этом на странице проекта s3_website на GitHub.