How can I get my AWS Lambda to access gems stored in vendor/bundle?

前端 未结 3 503
青春惊慌失措
青春惊慌失措 2020-12-31 08:58

I\'m writing a Lambda function in Ruby which will eventually send me some notifications in Slack via Webhook. So what I have for my lambda_function file is

3条回答
  •  Happy的楠姐
    2020-12-31 09:30

    I ran into this same problem when building AWS Lambda Layers w/ Ruby. A quick and easy way to get this to work is to add all of the gem paths to Ruby's $LOAD_PATH in your AWS Lambda. IE:

    load_paths = Dir["/opt/ruby/gems/2.5.0/**/lib"]
    $LOAD_PATH.unshift(*load_paths)
    
    require 'webhook'
    

    Replace "/opt/ruby/gems/2.5.0/**/lib" with "./vendor/bundle/ruby/2.3.0/gems/**/lib" in your case.

    When you do require 'webhook' it's going to go and look through all of the paths and come across "./vendor/bundle/ruby/2.3.0/gems/webhook-1.0.0/lib/webhook.rb" and add it into your AWS Lambda. require doesn't require a file extension.

    When we run rails through bundler it does a bunch of 'magic' for us including making sure that our $LOAD_PATH is pointing at the gems. Since AWS Lambdas don't use bundler, we need to do some of this 'magic' ourselves.

提交回复
热议问题