Я создаю приложение Ruby 2.7 Lambda.
Мое приложение зависит от драгоценного камня, существующего в github.
gem 'my-gem', git: 'https://github.com/my-org/my-gem', branch: 'main'
Я хочу написать сценарий, который может построить zip-файл развертывания, содержащий эту зависимость.
Когда я запускаю bundle install
, мой гем устанавливается в vendor / bundle / ruby / 2.7.0 / bundler / gems / my-gem-GITHA SH.
Для упаковки Lambda, я считаю, что мне нужно построить следующее
- vendor / bundle / ruby / 2.7.0 / gems / my-gem-1.0.0 / * (ruby code)
- vendor / bundle / ruby / 2.7.0 / specs / my-gem-1.0.0.gemspe c
Следующие действия сценария могут собрать эту структуру, но у меня был sh подход попроще.
cd vendor/bundle/ruby/2.7.0/bundler/gems/my-gem-*
# build the git gem (*.gem)
gem build
# copy the gem and the gemspec to the vendor/bundle/ruby/2.7.0 directories
cp *.gem ../../../gems
cp *.gemspec ../../../specifications/my-gem-1.0.0.gemspec
# upack the .gem file in the proper directory
cd ../../../gems
gem unpack *.gem
# return to the working directory
cd ../../../../..
# Zip the dependencies
zip -r deploy.zip \
vendor/bundle/ruby/2.7.0/gems \
vendor/bundle/ruby/2.7.0/specifications \
vendor/bundle/ruby/2.7.0/extensions \
lib
Мне было бы любопытно найти более простой подход к этой проблеме.