0

这里就是我与现在的工作:Rails不拿起SECRET_KEY_BASE环境变量

Ubuntu的忠实的14.04

的Rails 4.2.6

红宝石2.2.3

客运

Nginx

当我尝试访问IP我得到这个消息:当我看到nginx的

Incomplete response received from application 

/error.log中我看到:

Missing `secret_token` and `secret_key_base` for 'production' environment, set these values in `config/secrets.yml` 

在我做的服务器:

RAILS_ENV=production bundle exec rake secret 

我把这个结果到每个这些文件的好措施:

~/.bashrc 
~/.bash_profile 
~/.profile 
/app/shared/config/local_env.yml 

对于所有shell脚本的格式是:

export SECRET_KEY_BASE="[key]" 

对于我只是用local_env.yml

SECRET_KEY_BASE="[key]" 

我也尝试进入它不带引号。

每次我进行更改时,我都重新启动了服务器。没有雪茄。

还有什么问题呢?

- UPDATE

我甚至增加了密钥直接在secrets.yml文件。所以现在我想我的问题要么是与乘客/ nginx有关,要么是在某处存在拼写错误。

+0

尝试在您的服务器上输出'RAILS_ENV = production' –

+0

你究竟是什么意思?比如,将environemtn设置为服务器上的产品? –

+0

是的,确切地说。或者只是用RAILS_ENV =生产包启动应用程序exec rails s –

回答

1

更有可能的是环境变量没有实际设置,而不是Rails没有选择它们。你在榨取秘密,我不这样做。我在Unix etc/environment中手动设置它们,并且不检查任何秘密到源代码控制中。但以下几个步骤可以帮助您解决或磨合问题。

在你的Ubuntu服务器对全系统的环境变量

1- $env

查找您SECRET_TOKEN和SECRET_KEY_BASE。错误告诉你这些没有设置,这只是一个检查env的技巧。 (RAILS_ENV也将在列表中显示,如果它被设置。)

2- $sudo nano /etc/environment

添加以下行 - 用双引号之间的实际值。不要使用[键]或任何编程替换。

export SECRET_TOKEN="T99ABC..." 

export SECRET_KEY_BASE="99ABC..." 

3- $logout/$login重载环境瓦尔

4- $env - 再次检查

查找您SECRET_TOKEN和SECRET_KEY_BASE要设置的环境。

5-再次尝试部署。如果失败,请再次使用$env检查环境变量。它会告诉你,如果你的部署中的东西是粉碎你的SECRET_ * env变量。

+0

感谢您的回答!我已经检查了服务器上的env变量,并且秘密基础密钥在那里,但不是秘密令牌。不轨4.2 + drop secret_token?无论如何 - 我直接将令牌添加到链接的secret.yml文件(未勾选到git中)并且仍然不起作用。 –

+0

我完全推荐你丢弃secret.yml文件并直接按照上述步骤使用Unix来设置所需的环境变量;使用我意识到的yml没有任何优势; Unix etc/environment解决方案是最好的解决方案(在我看来)。你的secret.yml没有签入源代码控制,这让我想知道你是如何将它部署到服务器的。但首先这不是一个复杂的问题。 – Elvn

+0

它被检入,关键不是。我将使用你描述的这种方法。仍然不确定为什么这个hacky/direct方法不起作用。 –