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'
¯_(ツ)_/¯
我正在尝试将 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'
¯_(ツ)_/¯