Как я могу заставить AWS lambda найти зависимость grp c в моей функции? - PullRequest
0 голосов
/ 05 марта 2020

GRP C дает мне посадки здесь:

{
  "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 класс для подключения к Dialogflow, и самоцвет гугла довольно тяжелый с множеством зависимостей. Я написал несколько тестов, которые все проходят локально и в контексте приложения Rails, откуда я извлекаю этот фрагмент кода. Мне понадобится Nokogiri, но похоже, что Google - большой пользователь GRP C. И он просто не найдет этот файл, когда я укажу это вручную. Любая помощь очень ценится.

1 Ответ

0 голосов
/ 06 марта 2020

В случае вышеупомянутой проблемы - порядок операций - все, что я изучил. 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'

И из-за необходимости для grp c после облака Google 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'

Просто grp c до того, как диалог решит эту проблему.

Урок - всегда go назад к основам.

...