Rails 没有看到环境变量

Rails doesn't see environment variable

我正在尝试将 Rails 应用程序移至生产环境,但我遇到了问题 Rails 看不到我的环境变量。

我的 .bashrc 文件中有我的数据库设置密码

export APP_NAME_DATABASE_PASSWORD=secretkey

在 irb

ENV["APP_NAME_DATABASE_PASSWORD"]

returns secretkey.

正在使用

RAILS_ENV=production rails c

而且只是

rails c

returns secretkey 但是启动应用程序时我得到

Access is denied (using password: NO)

我在“How To Deploy a Rails App with Unicorn and Nginx on Ubuntu 14.04”上使用稍微修改过的初始化脚本来启动独角兽。

它托管在 Ubuntu 服务器 14.04 上。

export APP_NAME_DATABASE_PASSWORD=secretkey 很可能将您的环境变量范围限定为 bash 进程。由于 Unicorn 没有 运行 作为 bash 进程的子进程,因此它无权访问此环境变量。

我建议将您的 ENV 变量存储在一个地方,例如 application.yml 并在您的应用程序开始时将它们加载到您的 ruby 环境中。有一些很棒的工具可以做到这一点。我建议查看 Figaro:https://github.com/laserlemon/figaro.

这是另一个与您的问题相关的 post:Re-source .bashrc when restarting unicorn?

这是另一个选项:

http://railsguides.net/how-to-define-environment-variables-in-rails/

把你的环境变量放在local_env.yml,然后把这个放在application.rb

  config.before_configuration do
    env_file = File.join(Rails.root, 'config', 'local_env.yml')
    YAML.load(File.open(env_file)).each do |key, value|
      ENV[key.to_s] = value.to_s
    end if File.exists?(env_file)
  end

我遇到了类似的问题。一个简单的解决方案是 运行:

export RAILS_ENV=production && rails c

原因是当你不使用导出时,rails看不到环境变量,但在控制台执行echo时你看到它的值。

尝试 spring stop 然后 rails c

Spring 是一个 rails 加载 ENV 配置的应用程序预加载器。它可能没有加载您案例中的 .bashrc 更改。

使用zsh的用户:

echo 'export APP_NAME_DATABASE_PASSWORD=value' >> ~/.zshenv
source ~/.zshenv

检查是否真的设置了:

echo $APP_NAME_DATABASE_PASSWORD # value

对于 运行 rails 个应用程序,您可能还想做 spring stop

或者你忘记安装了gem 'dotenv-rails'¯_(ツ)_/¯