I am trying to get the sendgrid-ruby library to send an email, and I have managed to write a script that I can run line by line and get to work. However, when I try to run the script as a whole, I get
/Users/andrewaccuardi/.rvm/gems/ruby-2.4.1/gems/sendgrid-ruby-5.1.0/lib/sendgrid/client.rb:24:in `+': no implicit conversion of nil into String (TypeError)
Here is the code I am using for the call:
require 'sendgrid-ruby'
include SendGrid
sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY'])
email = SendGrid::Mail.new
email.from = SendGrid::Email.new(email: "[email protected]", name: "Example User")
email.subject = "Your Email's Subject"
p = SendGrid::Personalization.new
p.add_to(SendGrid::Email.new(email: "example_email", name: "example_name"))
p.add_substitution(Substitution.new(key: '-companyName-', value: 'Example_company'))
p.add_substitution(Substitution.new(key: '-eventName-', value: 'DINOSAUR PARTY'))
p.add_substitution(Substitution.new(key: '-eventDays-', value: '35'))
p.add_substitution(Substitution.new(key: '-eventStartDate-', value: '08/15/1993'))
p.add_substitution(Substitution.new(key: '-eventEndDate-', value: '12/22/1992'))
p.add_substitution(Substitution.new(key: '-eventStartTime-', value: '12:30pm'))
p.add_substitution(Substitution.new(key: '-eventEndTime-', value: '12:30am'))
p.add_substitution(Substitution.new(key: '-eventAddress-', value: '1234 SE Main St.'))
p.add_substitution(Substitution.new(key: '-eventYears-', value: '3'))
p.add_substitution(Substitution.new(key: '-eventWebsite-', value: 'www.example.com'))
p.add_substitution(Substitution.new(key: '-eventFacebook-', value: 'facebook.com/example'))
p.add_substitution(Substitution.new(key: '-eventTwitter-', value: 'twitter.com/example'))
p.add_substitution(Substitution.new(key: '-eventOtherMedia-', value: 'othermedia.com/example'))
p.add_substitution(Substitution.new(key: '-eventDescription-', value: "Vape shoreditch fixie man bun vexillologist VHS. You probably haven't heard of them stumptown edison bulb, echo park narwhal +1 skateboard portland poutine pok pok bitters activated charcoal pinterest. Mlkshk 90's jean shorts kale chips four dollar toast glossier. Ennui semiotics brunch twee man braid lumbersexual chia plaid. Crucifix kogi tofu cardigan. Roof party sustainable jean shorts umami asymmetrical dreamcatcher. Offal biodiesel edison bulb tofu raw denim cred. Kogi banh mi shoreditch."))
p.add_substitution(Substitution.new(key: '-eventAttendance-', value: '50+'))
p.add_substitution(Substitution.new(key: '-eventCategory-', value: 'Entertainment'))
p.add_substitution(Substitution.new(key: '-eventGender-', value: 'Female'))
p.add_substitution(Substitution.new(key: '-eventAge-', value: '21+'))
p.add_substitution(Substitution.new(key: '-eventRequest-', value: 'Beer'))
p.add_substitution(Substitution.new(key: '-sellingRequest-', value: 'Email Blast'))
p.add_substitution(Substitution.new(key: '-repsNeeded-', value: '5'))
p.add_substitution(Substitution.new(key: '-tapsNeeded-', value: '10'))
p.add_substitution(Substitution.new(key: '-cupsNeeded-', value: '15'))
p.add_substitution(Substitution.new(key: '-alcoholPermit-', value: 'Yeah, buddy'))
p.add_substitution(Substitution.new(key: '-food-', value: 'Pizza'))
p.add_substitution(Substitution.new(key: '-promoOpps-', value: 'Lots'))
p.add_substitution(Substitution.new(key: '-nonProfName-', value: 'Non-profit example name'))
p.add_substitution(Substitution.new(key: '-nonProfWebsite-', value: 'www.nonprofitexample.com'))
p.add_substitution(Substitution.new(key: '-nonProfEmail-', value: '[email protected]'))
p.add_substitution(Substitution.new(key: '-nonProfPhone-', value: '555-555-3331'))
email.add_personalization(p)
email.template_id = "684f302c-5669-4114-a953-c3e15d6de44d"
response = sg.client.mail._('send').post(request_body: email.to_json)
puts response.status_code
puts response.body
puts response.headers
Any insight into how to move forward would be great, thanks!
Rails console loads the environment variables so when the code is executed from there the ENV['SENDGRID_API_KEY'] has value.
When you run it as a script without loading the environment it results to nil.
Per documentation here:
https://github.com/sendgrid/sendgrid-ruby#setup-environment-variables
You have to export this.