Я не понимаю, почему моя secret_key_base не найдена. Когда я начинаю мое приложение в производстве я получаю это сообщение в веб-браузере: Missing 'secret_key_base' for 'production' environment, set this value in 'config/secrets.yml'
Отсутствует secret_key_base в производстве рельсов
Мои config/secret.yml
выглядит следующим образом:
production:
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
Когда я заменяю <%= ENV["SECRET_KEY_BASE"] %>
с ключом сгенерирована он работает, в противном случае, не рекомендуется ...
так что я положил ключ в /etc/profile
& ~/.bashrc
& ~/.rvm/environment/ruby-2.1.5
следующим образом:
export SECRET_KEY_BASE=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Когда я начинаю рельсы консоли в производственном режиме я могу увидеть мой ключ:
rails c production
Loading production environment (Rails 4.1.6)
2.1.5 :001 > ENV["SECRET_KEY_BASE"]
=> "XXXXXXXXXXXXXXXXXXXXX"
Я не понимаю, почему он не работает, зная все это. Мне что-то не хватает?
Полный журнал ошибок:
ERROR RuntimeError: Missing `secret_key_base` for 'production' environment, set this value in `config/secrets.yml`
/home/xxx/.rvm/gems/ruby-2.1.5/gems/railties-4.1.6/lib/rails/application.rb:462:in `validate_secret_key_config!'
/home/xxx/.rvm/gems/ruby-2.1.5/gems/railties-4.1.6/lib/rails/application.rb:195:in `env_config'
/home/xxx/.rvm/gems/ruby-2.1.5/gems/railties-4.1.6/lib/rails/engine.rb:510:in `call'
/home/xxx/.rvm/gems/ruby-2.1.5/gems/railties-4.1.6/lib/rails/application.rb:144:in `call'
/home/xxx/.rvm/gems/ruby-2.1.5/gems/rack-1.5.2/lib/rack/lock.rb:17:in `call'
/home/xxx/.rvm/gems/ruby-2.1.5/gems/rack-1.5.2/lib/rack/content_length.rb:14:in `call'
/home/xxx/.rvm/gems/ruby-2.1.5/gems/rack-1.5.2/lib/rack/handler/webrick.rb:60:in `service'
/home/xxx/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/webrick/httpserver.rb:138:in `service'
/home/xxx/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/webrick/httpserver.rb:94:in `run'
/home/xxx/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/webrick/server.rb:295:in `block in start_thread'
EDIT 1:
Я посмотрел на ~/.rvm/gems/ruby-2.1.5/gems/railties-4.1.6/lib/rails/application.rb
, и я сделал некоторые трассировка с помощью puts
. Похоже, моя переменная ENV равна nil
для Ruby в этом файле, но также в config/secret.yml
, когда файл разобран.
Вот бревно я положил на файл в процессе синтаксического анализа:
secrets = ActiveSupport::OrderedOptions.new
yaml = config.paths["config/secrets"].first
if File.exist?(yaml)
puts "FILE EXIST !"
puts ENV["SECRET_KEY_BASE"]
require "erb"
all_secrets = YAML.load(ERB.new(IO.read(yaml)).result) || {}
puts all_secrets.inspect
env_secrets = all_secrets[Rails.env]
puts env_secrets.inspect
secrets.merge!(env_secrets.symbolize_keys) if env_secrets
puts secrets.inspect
end
И вот результат, когда я начинаю свой сервер, используя rvmsudo рельсы S -e «производство» -p 80
FILE EXIST !
<-------------- (nil)
{"development"=>{"secret_key_base"=>"OK"}, "test"=>{"secret_key_base"=>"OK"}, "production"=>{"secret_key_base"=>nil}}
{"secret_key_base"=>nil}
{:secret_key_base=>nil}
похоже rvmsudo не проходит переменную ENV, я буду смотреть на него ...
выглядит отлично .. – Nithin
добавлен полный журнал трассировки ошибки ... –
сервер перезагрузки? – Nithin