Я установил свою среду так:
echo "export SENDGRID_API_KEY='xxxxxxxxx'" > sendgrid.env
echo "sendgrid.env" >> .gitignore
source ./sendgrid.env
Гем Sendgrid установлен.
Код, который я пытаюсь запустить:
require 'sendgrid-ruby'
include SendGrid
require 'json'
def hello_world
from = Email.new(email: '[email protected]')
to = Email.new(email: '[email protected]')
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>'





Вы путаете значение переменной env (xxxxxxxxx) с ее именем (SENDGRID_API_KEY).
При установке ключа API в коде используйте
sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY'])
вместо.
У меня все еще есть странная проблема. Приведенный выше код был помещен в helpers / mail.rb, и при запуске из командной строки он работает. Однако, когда я вставляю его в контроллер и пытаюсь выполнить, я все равно получаю ошибку no implicit conversion of nil into String. Вы, наверное, знаете, что могло вызвать это?
вы, вероятно, не отправили свой env-файл перед запуском сервера rails (в той же оболочке).
После полного перезапуска сервера, перезапуска возвышенного (файл .env все еще существует с правильной информацией) и после повторного получения файла env, чтобы убедиться, что я все еще получаю сообщение об ошибке. Мне действительно странно, что mail.rb в приложении / помощнике работает, но ломается в другом контроллере?
Вам не нужно перезапускать редактор. как вы запускаете свой сервер? попробуйте это: SENDGRID_API_KEY=xxxxxxxx rails s
Спасибо, что вроде работает! Но как я могу установить этот ключ API, чтобы я мог использовать его и в производственной среде? Должен ли он быть установлен в application.yml?
В основном вам нужно убедиться, что prod-server также предоставляет переменные env. Но это другой вопрос. Прочтите о секретах Rails здесь engineyard.com/blog/encrypted-rails-secrets-on-rails-5.1 и о переменных окружения здесь digitalocean.com/community/tutorials/…
Дип прав. /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'])
У меня все еще есть странная проблема. Приведенный выше код был помещен в helpers / mail.rb, и при запуске из командной строки он работает. Однако, когда я вставляю его в контроллер и пытаюсь выполнить, я все равно получаю ошибку no implicit conversion of nil into String. Вы, наверное, знаете, что могло вызвать это?
Значение этого:
ENV['xxxxxxx'], вероятно, равно нулю.