如何让 AWS lambda 在我的函数中找到 grpc 依赖项?
How can I make AWS lambda find the grpc dependency in my function?
GRPC 在这里让我很满意:
{
"errorMessage": "Could not find 'grpc' (~> 1.24) among 281 total gem(s)\nChecked in 'GEM_PATH=/var/task/vendor/bundle/ruby/2.5.0:/opt/ruby/gems/2.5.0:/var/runtime', execute `gem env` for more information",
"errorType": "Init<Gem::MissingSpecError>",
"stackTrace": [
"/var/lang/lib/ruby/site_ruby/2.5.0/rubygems/dependency.rb:311:in `to_specs'",
"/var/lang/lib/ruby/site_ruby/2.5.0/rubygems/specification.rb:1402:in `block in activate_dependencies'",
"/var/lang/lib/ruby/site_ruby/2.5.0/rubygems/specification.rb:1391:in `each'",
"/var/lang/lib/ruby/site_ruby/2.5.0/rubygems/specification.rb:1391:in `activate_dependencies'",
"/var/lang/lib/ruby/site_ruby/2.5.0/rubygems/specification.rb:1373:in `activate'",
"/var/lang/lib/ruby/site_ruby/2.5.0/rubygems.rb:215:in `rescue in try_activate'",
"/var/lang/lib/ruby/site_ruby/2.5.0/rubygems.rb:208:in `try_activate'",
"/var/lang/lib/ruby/site_ruby/2.5.0/rubygems/core_ext/kernel_require.rb:161:in `rescue in require'",
"/var/lang/lib/ruby/site_ruby/2.5.0/rubygems/core_ext/kernel_require.rb:35:in `require'",
"/var/task/vendor/bundle/ruby/2.5.0/gems/google-cloud-dialogflow-0.14.0/lib/google/cloud/dialogflow.rb:16:in `<top (required)>'",
"/var/task/google_dialog.rb:3:in `require_relative'",
"/var/task/google_dialog.rb:3:in `<top (required)>'",
"/var/lang/lib/ruby/site_ruby/2.5.0/rubygems/core_ext/kernel_require.rb:168:in `require'",
"/var/lang/lib/ruby/site_ruby/2.5.0/rubygems/core_ext/kernel_require.rb:168:in `rescue in require'",
"/var/lang/lib/ruby/site_ruby/2.5.0/rubygems/core_ext/kernel_require.rb:35:in `require'"
]
}
我在 vendor/bundle/ruby/2.5.0/gems/grpc-1.27.0-universal-darwin/src/ruby/lib/grpc.rb
看到了
我正在编写一个简单的 Ruby class 来连接到 Dialogflow,google gem 相当繁重,有很多依赖项。我已经编写了一些测试,这些测试都在本地以及在我提取这段代码的 Rails 应用程序的上下文中通过。我需要 Nokogiri,但 Google 似乎是 GRPC 东西的大用户。当我手动指定时,它不会找到该文件。非常感谢任何帮助。
在上述问题的情况下 - 操作顺序是我学到的一切。 Ruby 正在自上而下解析而不是加载所有内容然后再解析,我想我应该知道这一点,但是 Rails 为您做了很多神奇的事情。
所以当我看到上面的问题时,我的文件顶部有以下要求语句:
require_relative 'vendor/bundle/ruby/2.5.0/gems/nokogiri-1.10.9/lib/nokogiri.rb'
require_relative 'vendor/bundle/ruby/2.5.0/gems/google-cloud-dialogflow-0.14.0/lib/google/cloud/dialogflow.rb'
require_relative 'vendor/bundle/ruby/2.5.0/gems/google-cloud-dialogflow-0.14.0/lib/google/cloud/dialogflow/v2.rb'
require_relative 'vendor/bundle/ruby/2.5.0/gems/grpc-1.24.0-universal-darwin/src/ruby/lib/grpc.rb'
并且由于在 google 云之后需要 grpc ruby
require_relative 'vendor/bundle/ruby/2.5.0/gems/grpc-1.24.0-universal-darwin/src/ruby/lib/grpc.rb'
require_relative 'vendor/bundle/ruby/2.5.0/gems/nokogiri-1.10.9/lib/nokogiri.rb'
require_relative 'vendor/bundle/ruby/2.5.0/gems/google-cloud-dialogflow-0.14.0/lib/google/cloud/dialogflow.rb'
require_relative 'vendor/bundle/ruby/2.5.0/gems/google-cloud-dialogflow-0.14.0/lib/google/cloud/dialogflow/v2.rb'
只需将 grpc 放在 dialogflow 之前即可解决该问题。
教训 - 总是回到基础。
GRPC 在这里让我很满意:
{
"errorMessage": "Could not find 'grpc' (~> 1.24) among 281 total gem(s)\nChecked in 'GEM_PATH=/var/task/vendor/bundle/ruby/2.5.0:/opt/ruby/gems/2.5.0:/var/runtime', execute `gem env` for more information",
"errorType": "Init<Gem::MissingSpecError>",
"stackTrace": [
"/var/lang/lib/ruby/site_ruby/2.5.0/rubygems/dependency.rb:311:in `to_specs'",
"/var/lang/lib/ruby/site_ruby/2.5.0/rubygems/specification.rb:1402:in `block in activate_dependencies'",
"/var/lang/lib/ruby/site_ruby/2.5.0/rubygems/specification.rb:1391:in `each'",
"/var/lang/lib/ruby/site_ruby/2.5.0/rubygems/specification.rb:1391:in `activate_dependencies'",
"/var/lang/lib/ruby/site_ruby/2.5.0/rubygems/specification.rb:1373:in `activate'",
"/var/lang/lib/ruby/site_ruby/2.5.0/rubygems.rb:215:in `rescue in try_activate'",
"/var/lang/lib/ruby/site_ruby/2.5.0/rubygems.rb:208:in `try_activate'",
"/var/lang/lib/ruby/site_ruby/2.5.0/rubygems/core_ext/kernel_require.rb:161:in `rescue in require'",
"/var/lang/lib/ruby/site_ruby/2.5.0/rubygems/core_ext/kernel_require.rb:35:in `require'",
"/var/task/vendor/bundle/ruby/2.5.0/gems/google-cloud-dialogflow-0.14.0/lib/google/cloud/dialogflow.rb:16:in `<top (required)>'",
"/var/task/google_dialog.rb:3:in `require_relative'",
"/var/task/google_dialog.rb:3:in `<top (required)>'",
"/var/lang/lib/ruby/site_ruby/2.5.0/rubygems/core_ext/kernel_require.rb:168:in `require'",
"/var/lang/lib/ruby/site_ruby/2.5.0/rubygems/core_ext/kernel_require.rb:168:in `rescue in require'",
"/var/lang/lib/ruby/site_ruby/2.5.0/rubygems/core_ext/kernel_require.rb:35:in `require'"
]
}
我在 vendor/bundle/ruby/2.5.0/gems/grpc-1.27.0-universal-darwin/src/ruby/lib/grpc.rb
我正在编写一个简单的 Ruby class 来连接到 Dialogflow,google gem 相当繁重,有很多依赖项。我已经编写了一些测试,这些测试都在本地以及在我提取这段代码的 Rails 应用程序的上下文中通过。我需要 Nokogiri,但 Google 似乎是 GRPC 东西的大用户。当我手动指定时,它不会找到该文件。非常感谢任何帮助。
在上述问题的情况下 - 操作顺序是我学到的一切。 Ruby 正在自上而下解析而不是加载所有内容然后再解析,我想我应该知道这一点,但是 Rails 为您做了很多神奇的事情。
所以当我看到上面的问题时,我的文件顶部有以下要求语句:
require_relative 'vendor/bundle/ruby/2.5.0/gems/nokogiri-1.10.9/lib/nokogiri.rb'
require_relative 'vendor/bundle/ruby/2.5.0/gems/google-cloud-dialogflow-0.14.0/lib/google/cloud/dialogflow.rb'
require_relative 'vendor/bundle/ruby/2.5.0/gems/google-cloud-dialogflow-0.14.0/lib/google/cloud/dialogflow/v2.rb'
require_relative 'vendor/bundle/ruby/2.5.0/gems/grpc-1.24.0-universal-darwin/src/ruby/lib/grpc.rb'
并且由于在 google 云之后需要 grpc ruby
require_relative 'vendor/bundle/ruby/2.5.0/gems/grpc-1.24.0-universal-darwin/src/ruby/lib/grpc.rb'
require_relative 'vendor/bundle/ruby/2.5.0/gems/nokogiri-1.10.9/lib/nokogiri.rb'
require_relative 'vendor/bundle/ruby/2.5.0/gems/google-cloud-dialogflow-0.14.0/lib/google/cloud/dialogflow.rb'
require_relative 'vendor/bundle/ruby/2.5.0/gems/google-cloud-dialogflow-0.14.0/lib/google/cloud/dialogflow/v2.rb'
只需将 grpc 放在 dialogflow 之前即可解决该问题。
教训 - 总是回到基础。