Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 4 轨道不';t选取SECRET\u KEY\u基环境变量_Ruby On Rails 4_Environment Variables_Ubuntu 14.04_Production Environment - Fatal编程技术网

Ruby on rails 4 轨道不';t选取SECRET\u KEY\u基环境变量

Ruby on rails 4 轨道不';t选取SECRET\u KEY\u基环境变量,ruby-on-rails-4,environment-variables,ubuntu-14.04,production-environment,Ruby On Rails 4,Environment Variables,Ubuntu 14.04,Production Environment,以下是我目前正在处理的问题: UbuntuTrusty 14.04 轨道4.2.6 Ruby 2.2.3 乘客 Nginx 当我尝试访问IP时,我收到以下消息: Incomplete response received from application 当我查看nginx/error.log时,我看到: Missing `secret_token` and `secret_key_base` for 'production' environment, set these values in

以下是我目前正在处理的问题:

UbuntuTrusty 14.04

轨道4.2.6

Ruby 2.2.3

乘客

Nginx

当我尝试访问IP时,我收到以下消息:

 Incomplete response received from application
当我查看nginx/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]"
我也试着在没有引号的情况下输入它

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

还有什么问题

--更新


我甚至直接将密钥添加到secrets.yml文件中。所以现在我想我的问题要么与乘客/nginx有关,要么与某个地方的打字错误有关

更可能的情况是环境变量没有实际设置,而Rails没有提取它们。你在搜集秘密,我可不这么做。我在Unix
etc/environment
中手动设置了它们,并且没有在源代码管理中检查任何机密。但以下几步应该可以帮助您解决或磨练这个问题

在Ubuntu服务器上获取系统范围的环境变量

1-
$env

寻找你的秘密令牌和秘密密钥库。错误告诉您这些未设置,这只是一种检查env的技术。(如果设置了RAILS_ENV,也将在列表中显示。)

2-
$sudo nano/etc/environment

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

export SECRET_TOKEN="T99ABC..."

export SECRET_KEY_BASE="99ABC..."
3-
$logout
/
$login
重新加载环境变量

4-
$env
-再次检查环境

查找要设置的密钥令牌和密钥库


5-再次尝试部署。如果失败,请再次使用
$env
检查环境变量。它将告诉您部署中是否有什么东西正在粉碎您的秘密环境变量

更可能的情况是环境变量没有实际设置,而Rails没有提取它们。你在搜集秘密,我可不这么做。我在Unix
etc/environment
中手动设置了它们,并且没有在源代码管理中检查任何机密。但以下几步应该可以帮助您解决或磨练这个问题

在Ubuntu服务器上获取系统范围的环境变量

1-
$env

寻找你的秘密令牌和秘密密钥库。错误告诉您这些未设置,这只是一种检查env的技术。(如果设置了RAILS_ENV,也将在列表中显示。)

2-
$sudo nano/etc/environment

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

export SECRET_TOKEN="T99ABC..."

export SECRET_KEY_BASE="99ABC..."
3-
$logout
/
$login
重新加载环境变量

4-
$env
-再次检查环境

查找要设置的密钥令牌和密钥库


5-再次尝试部署。如果失败,请再次使用
$env
检查环境变量。它将告诉您部署中是否有什么东西正在粉碎您的秘密环境变量

在您的服务器上尝试导出
RAILS\u ENV=production
,您的确切意思是什么?例如,在服务器上将Environmentn设置为production?是的,完全正确。或者只需使用RAILS_ENV=production bundle exec RAILS启动应用程序,我正在使用capistrano部署RAILS,因此当我执行
cap production deploy
时,它应该在生产中运行服务器。它在部署输出中显示
export RAILS\u ENV=“production”
。我如何才能确认这一点?请尝试在您的服务器上导出
RAILS\u ENV=production
,您的确切意思是什么?例如,在服务器上将Environmentn设置为production?是的,完全正确。或者只需使用RAILS_ENV=production bundle exec RAILS启动应用程序,我正在使用capistrano部署RAILS,因此当我执行
cap production deploy
时,它应该在生产中运行服务器。它在部署输出中显示
export RAILS\u ENV=“production”
。我还能怎么确认呢?谢谢你的回答!我已经检查了服务器上的env变量,其中有密钥,但没有密钥令牌。rails 4.2+不会丢弃机密令牌吗?无论如何-我直接将令牌添加到一个链接的secret.yml文件(未签入git),但它仍然不起作用。我完全建议您放弃secret.yml文件,直接按照上述步骤使用Unix来设置所需的环境变量;我知道使用yml没有任何好处;Unix etc/环境解决方案是最好的解决方案(在我看来)。您的secret.yml没有签入源代码管理,这让我想知道您是如何将其部署到服务器的。但这是一个一开始就不需要的复杂问题。它是签入的,钥匙不是。我将使用你描述的方法。仍然不确定为什么这个hacky/direct方法不起作用。是链接文件把它搞砸了。我删除了linked secrets.yml文件,只是让该文件引用env变量,它就可以工作了。我猜rails无法获取链接文件,或者它在正确的时间不可见..诸如此类。谢谢谢谢你的回答!我已经检查了服务器上的env变量,其中有密钥,但没有密钥令牌。rails 4.2+不会丢弃机密令牌吗?无论如何-我直接将令牌添加到一个链接的secret.yml文件(未签入git),但它仍然不起作用。我完全建议您放弃secret.yml文件,直接按照上述步骤使用Unix来设置所需的环境变量;我知道使用yml没有任何好处;Unix etc/环境解决方案是最好的解决方案(在我看来)。你的secret.yml没有被检查进源代码管理,这让我很好奇