我已经使用NGINX,Unicorn和Capistrano将我的Rails 4.2.0应用程序部署到Ubuntu 14.04 VPS中。除了在生产环境中缺少我的secret_key_base之外,一切正常。
这是我的秘密。生产区块:
production:
secret_key_base: <%= ENV["APP1_SECRET_KEY_BASE"] %>
在服务器的〜/ .bashrc中我有:
export APP1_SECRET_KEY_BASE=token
变量一切正常:
deployer@euler:~$ echo $APP1_SECRET_KEY_BASE
token
deployer@euler:~$ irb
2.2.0 :001 > ENV["APP1_SECRET_KEY_BASE"]
=> "token"
2.2.0 :002 > exit
但是当我尝试访问我的应用程序时,我在log / unicorn.log中收到错误:
ERROR -- : app error: Missing `secret_token` and `secret_key_base` for 'production' environment, set these values in `config/secrets.yml` (RuntimeError)
我觉得Unicorn无法访问这些值。所以我试图使用NGINX Env functionality,但再次没有成功,在我的nginx.conf中尝试了两种方式:
env APP1_SECRET_KEY_BASE;
和
env APP1_SECRET_KEY_BASE=token;
但是,再一次,没有成功。配置通过nginx启动,但应用程序无法正常工作。
我甚至尝试使用dotenv gem,但也没有成功。
可能发生的任何提示?
答案 0 :(得分:2)
在/etc/nginx/nginx.conf
使用以下方法添加所需的变量:
passenger_env_var VARIABLE_NAME&#34;值&#34 ;;
答案 1 :(得分:0)
您可以使用dotenv-rails
gem来完成此任务。在服务器上的shared
目录中有一个名为.env
的文件,并将其复制到部署的current
目录中。
该文件会包含以下内容:
SECRET_KEY_BASE=6c073f07...
使用dotenv-rails
的另一个好处是,如果您的应用程序需要任何其他环境配置,您现在可以拥有它。
答案 2 :(得分:-1)
在config/unicorn.rb
after_fork do |server, worker|
# ...
ENV["SECRET_KEY_BASE"]=your_secret_key
# ...
end