【问题标题】:Production.rb not reading environment variables in productionProduction.rb 不读取生产环境变量
【发布时间】:2019-06-08 02:37:37
【问题描述】:

我正在将此操作邮件设置用于生产应用程序

config.action_mailer.smtp_settings = {
    address:              'smtp.gmail.com',
    port:                 587,
    domain:               'example.com',
    user_name:            ENV['EMAIL'],
    password:             ENV['EMAIL_PASSWORD'],
    authentication:       'login',
    enable_starttls_auto: true
  }

在我的 DigitalOcean droplet (Ubuntu 14.04) 上我跑了

export EMAIL="email"
export EMAIL_PASSWORD="password"

但是,它不起作用。我还尝试将它们添加到我的 .bashrc 文件中,但也没有用。

我知道其他帖子可能会建议使用 figaro gem 或 dotenv 之类的东西,但是,我真的不知道如何在我的情况下使用这些 gem。此应用程序适用于希望使用smtp 发送电子邮件的客户。我将无法获取他们的凭据并将它们存储在我的本地计算机上。幸运的是,访问 DigitalOcean 上的服务器非常容易,因为它在网站上具有内置的 ssh 功能,可让您访问水滴。

这意味着他们必须手动输入export EMAIL="theiremailgoeshere" 行,密码也是如此。但如前所述,由于某种原因,这不起作用

感谢您的帮助,非常感谢!

我不知道这是否会有所帮助,但我正在使用 Digital Ocean droplet 来托管我的网站。我有一个 Ubuntu (14.04) 图像在上面运行,我正在使用 Nginx 和Passenger。

【问题讨论】:

  • 生产环境使用什么样的web server和app server?
  • 尝试改用ENV.fetch('EMAIL')。它可能无法解决问题,但如果未设置 ENV var,则会引发错误,从而使调试更加容易。
  • @max 是的,我在使用 ENV.fetch('EMAIL') 时确实遇到了错误。我应该如何解决这个问题?

标签: ruby-on-rails digital-ocean production-environment


【解决方案1】:

来自~/.bashrc 的环境变量仅适用于使用 bash shell 打开的程序。如果您作为一个用户通过 ssh 进入系统并且您的 Web 服务器作为一个单独的较低权限用户运行,也会出现问题。

您可以在/etc/environment/etc/profile.d/*.sh 中设置system wide env vars in Ubuntu。这些 ENV 变量将为所有用户和所有打开的 shell - 甚至是从 GUI 打开的程序设置。

不过,我建议您使用更具体的密钥来点赞MYAPP_EMAIL,以避免潜在的冲突。

【讨论】:

  • 你给了我两条路。我是否必须将环境变量添加到两个文件中?或者我可以选择一个吗?我也不知道*.sh文件是什么
  • 选择一个。 /etc/profile.d/*.sh 我的意思是您在 /etc/profile.d/ 中创建一个 shell 脚本 (.sh) 文件。这使您可以使用单独的文件,而不是将所有内容都扔到一个文件中。 help.ubuntu.com/community/…
猜你喜欢
  • 1970-01-01
  • 2021-07-25
  • 2017-08-13
  • 2019-02-25
  • 2021-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多