我有一个rails应用程序,其中我在控制器中包含了一个api密钥。在控制器中,我有:
def email_signup
email_address = params[:email_address]
url = URI("https://api.sendgrid.com/v3/contactdb/recipients")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
request = Net::HTTP::Post.new(url)
api_key = ENV['SENDGRID_API_KEY']
request["authorization"] = "Bearer #{api_key}"
request["content-type"] = 'application/json'
request.body = [{"email": email_address}].to_json
response = http.request(request)
result = JSON.parse(response.body)
Rails.logger.info "api_key is: #{api_key}"
Rails.logger.info "Email response is: #{response.read_body}" #uncomment to view response/debug
# redirect_to jobs_url, notice: result["errors"]
redirect_to jobs_url, notice: "Thanks for Signing Up"
end
在我看到的日志中:
I, [2018-08-17T19:54:17.439705 #24726] INFO -- : [f0fce3e4-8574-49d4-84f9-a52c8e7cec24] api_key is:
I, [2018-08-17T19:54:17.439807 #24726] INFO -- : [f0fce3e4-8574-49d4-84f9-a52c8e7cec24] Email response is: {"errors":[{"field":null,"message":"authorization required"}]}
所以看起来环境变量ENV['SENDGRID_API_KEY']
没有被读取。但是获取this...if我打开rails控制台并输入ENV['SENDGRID_API_KEY']
,我看到了API键/字符串。
你知道为什么这不起作用吗?
发布于 2018-08-21 03:31:25
感谢Arup找到了解决方案。我采纳了他的建议,将以下内容添加到我的/etc/nginx/sites-enabled/default
中,从而在passenger中添加了环境变量
passenger_env_var SENDGRID_API_KEY <my_key_here>;
...and这个很好用。这很奇怪,因为即使我已经将环境变量添加到/etc/environment中,并且可以从控制台打印环境变量,但出于某种原因,Rails中的控制器仍然不能获取这些变量。
https://stackoverflow.com/questions/51936312
复制相似问题