Отсутствует «secret_key_base» для «производственной» среды, установите это значение в config / secrets.yml на Ubuntu Server - PullRequest
0 голосов
/ 30 мая 2018

Итак, на сервере Ubuntu я получаю это в своих журналах:

#<RuntimeError: Missing `secret_key_base` for 'production' 
       environment, set this value in `config/secrets.yml`>
      /home/deploy/apps/project/shared/bundle/ruby/2.4.0/gems/railties-5.1.4/lib/rails/application.rb:510:in `validate_secret_key_config!'
      /home/deploy/apps/project/shared/bundle/ruby/2.4.0/gems/railties-5.1.4/lib/rails/application.rb:247:in `env_config'```

Мой браузер:

An unhandled lowlevel error occurred. The application logs may have details.

Мой secrets.yml (в deploy / apps / project / current /config & deploy / apps / project / shared / config):

production:
      secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>

deploy.rb

...
namespace :deploy do
    desc 'Rails Secrets'
    task :secret do
      on roles(:app) do
        execute "export SECRET_KEY_BASE=`bundle exec rake secret`"
      end
    end
    before :finishing,  :secret
    ...
end

Я также пытался вручную добавить SECRET_KEY_BASE в /etc/profile.Он присутствует, когда я набираю эту команду: printenv (потому что я добавил ее вручную), но при выходе из root она больше не присутствует в printenv.

Переменная ENV отсутствуетв команде printenv.После выполнения развертывания (cap production deploy:initial).

Как устранить эту ошибку?

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

Как устранить эту ошибку?

Первое, что я заметил, это

secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>

Я подозреваю, что вам не нужен вызов шаблона ERB.

secret_key_base: ENV["SECRET_KEY_BASE"]

Переменная ENV отсутствует в команде printenv.После того, как я проведу развертывание

Во-вторых, мне интересно, разветвлена ​​ли новая оболочка в вашей цепочке.Если так, то переменные набора оболочки не будут доступны, потому что новая разветвленная оболочка, естественно, не имеет ее.Таким образом, единственный способ обойти это, например, установить вещи.$HOME/.profile или ваши снаряды profile.

В-третьих, я бы решил использовать какой-нибудь вспомогательный камень для решения этой проблемы.Есть такие, как например. Figaro и вот простая статья, показывающая вам как ее использовать .

Я также попытался вручную добавить SECRET_KEY_BASE в / etc / profile

Добавление вещей в /etc/profile - плохая идея.Он используется для установки общесистемных переменных среды для пользовательских оболочек.Вероятно, вам нужно $HOME/.profile.

при выходе из root

Я бы настоятельно рекомендовал не запускать вещи под root, так как это побеждает всю GNU /Настройка безопасности Linux.Если вы хотите притвориться, что запускаете все как root, используйте учетную запись пользователя vanilla, например, с.fakeroot.

execute "export SECRET_KEY_BASE = bundle exec rake secret"

Такая обработка секретов немного неуклюжа, не слишком безопасна и не удобна.Возможно, золотым стандартом в настоящее время является Хранилище Хашикорпа , которое также имеет замечательный Rails-адаптер .

Эта система специально разработана с учетом требований безопасности.Может быть, излишним для вашей текущей ситуации, но я подумал, стоит упомянуть.

Удачи и надеюсь, что это рецензия поможет!

0 голосов
/ 30 мая 2018

Похоже, что пользователь, в который вы вошли, - это не тот пользователь, которого вы использовали для добавления базы секретных ключей.Вы вошли как root, но я не думаю, что вы развертываете и не запускаете сервер с root, верно?

Если вы развертываете с пользователем с именем deploy, вы должны войти в систему как deploy и добавить env var в контекст развертывания (например, ~/.bashrc).Я не уверен на 100%, что /etc/profile будет работать здесь.Также не забудьте перезапустить сервер rails после добавления переменной var

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...