簡體   English   中英

AWS Lambda:Ruby函數無法加載gem

[英]AWS Lambda: Ruby function failing to load gem

我有一個Ruby Lambda函數,該函數取決於外部(即非AWS)的RubyGem。 我有一個Gemfile ,一個Gemfile.lock和一個vendor/bundle目錄。 從本地角度來看,一切看起來都不錯。

我試過使用bundle install --path vendor/bundlebundle install --deployment來安裝gem,並且在壓縮文件時特別包括了vendor目錄: zip -r function.zip myfunction.rb vendor

盡管如此,當我在Lambda控制台中測試該功能時,它會失敗,並顯示錯誤消息,提示無法找到庫,例如

{
  "errorMessage": "cannot load such file -- mysql2",
  "errorType": "Init<LoadError>",
  "stackTrace": [
    "/var/lang/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'",
    "/var/lang/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'",
    "/var/task/hello_ruby_record.rb:3:in `<top (required)>'",
    "/var/lang/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'",
    "/var/lang/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'"
  ]
}

大概我在上傳函數之前將寶石捆綁在一起確實做錯了什么; 但我不知道是什么。 有人有什么想法嗎?

我遇到了同樣的問題。 根本原因是在本地和Lambda函數中使用的紅寶石版本不同。 當前,AWS Lambda使用的是Ruby 2.5,而您的gem位於“ / vendor / bundle / ruby​​ /”。 因此,您的lambda函數無法找到您上傳的gem庫。 要使用Ruby版本覆蓋gem路徑,請在包含處理函數的文件頂部添加以下提到的代碼:

  my_gem_path = Dir["./vendor/bundle/ruby/<your-ruby-version>/gems/**/lib"]
  $LOAD_PATH.unshift(*my_gem_path)

或者,只需嘗試升級本地Ruby版本並將其與Lambda函數viz 2.5當前使用的確切版本匹配。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM