遭遇している問題
Serverless Frameworkを使用して作成したAWS Lambda関数でvendor/bundle
以下にインストールしているGemが読み込まれません。。。
環境
bash
1$ sls -v 2Framework Core: 1.51.0 3Plugin: 1.3.9 4SDK: 2.1.0
やったこと
bash
1$ sls create -t aws-ruby -p ruby-at-lambda-test 2$ cd ruby-at-lambda-test 3$ rbenv local 2.5.0 4$ bundle init
- Gemfile
ruby
1# frozen_string_literal: true 2 3source "https://rubygems.org" 4 5git_source(:github) {|repo_name| "https://github.com/#{repo_name}" } 6 7gem 'bcrypt'
bash
1$ bundle install 2$ bundle install --deployment
- handler.rb
ruby
1require 'json' 2require 'bcrypt' 3 4def hello(event:, context:) 5 password = BCrypt::Password::create('password') 6 7 { 8 statusCode: 200, 9 body: { 10 password: password 11 }.to_json 12 } 13 14end
bash
1$ sls deploy 2$ sls invoke -f hello 3# エラーが起きる 4{ 5 "errorMessage": "cannot load such file -- bcrypt", 6 "errorType": "Init<LoadError>", 7 "stackTrace": [ 8 "/var/lang/lib/ruby/site_ruby/2.5.0/rubygems/core_ext/kernel_require.rb:54:in `require'", 9 "/var/lang/lib/ruby/site_ruby/2.5.0/rubygems/core_ext/kernel_require.rb:54:in `require'", 10 "/var/task/handler.rb:2:in `<top (required)>'", 11 "/var/lang/lib/ruby/site_ruby/2.5.0/rubygems/core_ext/kernel_require.rb:54:in `require'", 12 "/var/lang/lib/ruby/site_ruby/2.5.0/rubygems/core_ext/kernel_require.rb:54:in `require'" 13 ] 14}
試したこと
Bundler.require
を追加
diff
1+ require 'bundler' 2require 'json' 3- require 'bcrypt' 4+ Bundler.require 5 6def hello(event:, context:) 7 password = BCrypt::Password::create('password') 8 9 { 10 statusCode: 200, 11 body: { 12 password: password 13 }.to_json 14 } 15 16end
bash
1$ sls deploy 2$ sls invoke -f hello 3{ 4 "errorMessage": "Could not find bcrypt-3.1.13 in any of the sources", 5 "errorType": "Init<Bundler::GemNotFound>", 6 "stackTrace": [ 7 "/var/runtime/gems/bundler-2.0.1/lib/bundler/spec_set.rb:87:in `block in materialize'", 8 "/var/runtime/gems/bundler-2.0.1/lib/bundler/spec_set.rb:81:in `map!'", 9 "/var/runtime/gems/bundler-2.0.1/lib/bundler/spec_set.rb:81:in `materialize'", 10 "/var/runtime/gems/bundler-2.0.1/lib/bundler/definition.rb:170:in `specs'", 11 "/var/runtime/gems/bundler-2.0.1/lib/bundler/definition.rb:237:in `specs_for'", 12 "/var/runtime/gems/bundler-2.0.1/lib/bundler/definition.rb:226:in `requested_specs'", 13 "/var/runtime/gems/bundler-2.0.1/lib/bundler/runtime.rb:108:in `block in definition_method'", 14 "/var/runtime/gems/bundler-2.0.1/lib/bundler/runtime.rb:20:in `setup'", 15 "/var/runtime/gems/bundler-2.0.1/lib/bundler.rb:107:in `setup'", 16 "/var/runtime/gems/bundler-2.0.1/lib/bundler.rb:114:in `require'", 17 "/var/task/handler.rb:3:in `<top (required)>'", 18 "/var/lang/lib/ruby/site_ruby/2.5.0/rubygems/core_ext/kernel_require.rb:54:in `require'", 19 "/var/lang/lib/ruby/site_ruby/2.5.0/rubygems/core_ext/kernel_require.rb:54:in `require'" 20 ] 21}
require 'bundler/setup'
を追加
diff
1+ require 'bundler/setup' 2require 'json' 3require 'bcrypt' 4 5def hello(event:, context:) 6 password = BCrypt::Password::create('password') 7 8 { 9 statusCode: 200, 10 body: { 11 password: password 12 }.to_json 13 } 14 15end
bash
1$ sls deploy 2$ sls invoke -f hello 3{ 4 "errorMessage": "Could not find bcrypt-3.1.13 in any of the sources", 5 "errorType": "Init<Bundler::GemNotFound>", 6 "stackTrace": [ 7 "/var/runtime/gems/bundler-2.0.1/lib/bundler/spec_set.rb:87:in `block in materialize'", 8 "/var/runtime/gems/bundler-2.0.1/lib/bundler/spec_set.rb:81:in `map!'", 9 "/var/runtime/gems/bundler-2.0.1/lib/bundler/spec_set.rb:81:in `materialize'", 10 "/var/runtime/gems/bundler-2.0.1/lib/bundler/definition.rb:170:in `specs'", 11 "/var/runtime/gems/bundler-2.0.1/lib/bundler/definition.rb:237:in `specs_for'", 12 "/var/runtime/gems/bundler-2.0.1/lib/bundler/definition.rb:226:in `requested_specs'", 13 "/var/runtime/gems/bundler-2.0.1/lib/bundler/runtime.rb:108:in `block in definition_method'", 14 "/var/runtime/gems/bundler-2.0.1/lib/bundler/runtime.rb:20:in `setup'", 15 "/var/runtime/gems/bundler-2.0.1/lib/bundler.rb:107:in `setup'", 16 "/var/runtime/gems/bundler-2.0.1/lib/bundler/setup.rb:20:in `<top (required)>'", 17 "/var/lang/lib/ruby/site_ruby/2.5.0/rubygems/core_ext/kernel_require.rb:54:in `require'", 18 "/var/lang/lib/ruby/site_ruby/2.5.0/rubygems/core_ext/kernel_require.rb:54:in `require'", 19 "/var/task/handler.rb:1:in `<top (required)>'", 20 "/var/lang/lib/ruby/site_ruby/2.5.0/rubygems/core_ext/kernel_require.rb:54:in `require'", 21 "/var/lang/lib/ruby/site_ruby/2.5.0/rubygems/core_ext/kernel_require.rb:54:in `require'" 22 ] 23}
$LOAD_PATH
を追加
diff
1+ $LOAD_PATH.unshift('./vendor/bundle/ruby/2.6.0/gems/bcrypt-3.1.13/lib') 2require 'json' 3require 'bcrypt' 4 5def hello(event:, context:) 6 password = BCrypt::Password::create('password') 7 8 { 9 statusCode: 200, 10 body: { 11 password: password 12 }.to_json 13 } 14 15end
bash
1$ sls deploy 2$ sls invoke -f hello 3{ 4 "errorMessage": "cannot load such file -- bcrypt_ext", 5 "errorType": "Init<LoadError>", 6 "stackTrace": [ 7 "/var/lang/lib/ruby/site_ruby/2.5.0/rubygems/core_ext/kernel_require.rb:54:in `require'", 8 "/var/lang/lib/ruby/site_ruby/2.5.0/rubygems/core_ext/kernel_require.rb:54:in `require'", 9 "/var/task/vendor/bundle/ruby/2.6.0/gems/bcrypt-3.1.13/lib/bcrypt.rb:12:in `<top (required)>'", 10 "/var/lang/lib/ruby/site_ruby/2.5.0/rubygems/core_ext/kernel_require.rb:54:in `require'", 11 "/var/lang/lib/ruby/site_ruby/2.5.0/rubygems/core_ext/kernel_require.rb:54:in `require'", 12 "/var/task/handler.rb:3:in `<top (required)>'", 13 "/var/lang/lib/ruby/site_ruby/2.5.0/rubygems/core_ext/kernel_require.rb:54:in `require'", 14 "/var/lang/lib/ruby/site_ruby/2.5.0/rubygems/core_ext/kernel_require.rb:54:in `require'" 15 ] 16}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/29 09:21