Реализация Sendgrid - неявное преобразование nil в String

Я установил свою среду так:

echo "export SENDGRID_API_KEY='xxxxxxxxx'" > sendgrid.env
echo "sendgrid.env" >> .gitignore
source ./sendgrid.env

Sendgrid gem установлен.

Код, который я пытаюсь запустить:

require 'sendgrid-ruby'
include SendGrid
require 'json'

def hello_world
  from = Email.new(email: 'test@example.com')
  to = Email.new(email: 'test@example.com')
  subject = 'Sending with SendGrid is Fun'
  content = Content.new(type: 'text/plain', value: 'and easy to do anywhere, even with Ruby')
  mail = Mail.new(from, subject, to, content)

  #previous version
  #sg = SendGrid::API.new(api_key: ENV['xxxxxxx'])

  #current version
  sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY'])
  response = sg.client.mail._('send').post(request_body: mail.to_json)
  puts response.status_code
  puts response.body
  puts response.headers
end

hello_world

Но я получаю следующую ошибку:

no implicit conversion of nil into String

Внутри этого файла:

/ruby/gems/2.4.0/gems/sendgrid-ruby-5.2.0/lib/sendgrid/client.rb:24:in

Я не могу понять, что здесь не так....

Полная ошибка:

/Users/pimzonneveld/.rbenv/versions/2.4.3/lib/ruby/gems/2.4.0/gems/sendgrid-ruby-5.2.0/lib/sendgrid/client.rb:24:in `+': no implicit conversion of nil into String (TypeError)
    from /Users/pimzonneveld/.rbenv/versions/2.4.3/lib/ruby/gems/2.4.0/gems/sendgrid-ruby-5.2.0/lib/sendgrid/client.rb:24:in `initialize'
    from app/helpers/mail.rb:12:in `new'
    from app/helpers/mail.rb:12:in `hello_world'
    from app/helpers/mail.rb:19:in `<main>'

2 ответа

Решение

Вы путаете значение переменной env (xxxxxxxxx) с его именем (SENDGRID_API_KEY).

При настройке ключа API в вашем коде используйте

  sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY'])

вместо.

Глубоко верно. /ruby/gems/2.4.0/gems/sendgrid-ruby-5.2.0/lib/sendgrid/client.rb:24:in относится к

"Authorization": "Bearer ' + @api_key + '",

так что неявное преобразование nil в String имеет смысл.

Вы должны изменить

sg = SendGrid::API.new(api_key: ENV['xxxxxxx'])

за:

sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY'])
Другие вопросы по тегам