2015-04-29 2 views
10

Недавно я вытащил один из моих репозиториев из Git. После запуска сервера я получаю следующее: Отсутствует secret_token и secret_key_base. Это может произойти, потому что я включил secrets.yml в свой .gitignore.Отсутствует `secret_token` и` secret_key_base` - Rails 4.2.0 с RVM

Моя текущая настройка

  • Ubuntu 14,04
  • рубин 2.2.0p0
  • рельсы 4.2.0
  • РВМ 1.26.11
  • локальный сервер (не удаленная) среда
  • развитие

Многие онлайн-ресурсы заявляют, что я должен генерировать новый ключ, используя rake secret и добавлять его в секреты .yml. Размещение ключа внутри secrets.yml и перезапуск сервера rails не работает.


Отредактировано: Добавленное содержание secrets.yml ниже. -04/30/15 9:04 утра EST

development: 
    secret_key_base: LONG KEY HERE 

test: 
    secret_key_base: LONG KEY HERE 

# Do not keep production secrets in the repository, 
# instead read values from the environment. 
production: 
    secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> 

Пожалуйста, знайте, это установлено в качестве среды разработки на локальном сервере в моем месте жительства (не Heroku).


Другие ресурсы состояние мне нужно, чтобы добавить запись в моей secret_token.rb, но этот файл не существует в моем проекте.

Единственный способ мое приложение будет работать, если я должен был создать secret_token.rb файл и добавить либо один из следующих внутри него:

MyApp::Application.config.secret_token = if Rails.env.development? or Rails.env.test? 
    ('x' * 30) # meets minimum requirement of 30 chars long 
else 
    ENV['SECRET_TOKEN-'] 
end 

или

MyApp::Application.config.secret_token = 'the secret key' 

Почему этот файл требуется, когда Rails docs заявляет, что удаляет его?

3.3 config/secrets.yml

secret_token.rb не требуется для запуска новых проектов, сгенерированных, только те из моего Git репо.

Просьба сообщить, почему мое приложение требует secret_token.rb, хотя документы Rails заявляют иначе, иначе мое приложение не будет работать без него.

Отредактировано: -04/30/15 9:27 утра EST

Другое странное поведение я могу переименовать secrets.yml в то время как secret_token.rb остается на месте, и приложение будет по-прежнему работать.

Я попытался переименовать secret_token.rb, добавленный <%= ENV["SECRET_KEY_BASE"] %> в развитие, и я все еще испытываю проблему Missing secret_token.

Отредактировано: Добавлено git repo внизу. -05/08/15 2:50 утра EST

мерзавец репо: https://github.com/captain-awesome/blog_mac

Что-то странно, если бы я изменить любой из 32 символов, за исключением secret_token.rb, перезагрузить сервер ... мое приложение запустится. Является ли 32-символьная строка в файле secret_token.rb тем, что я могу сделать самостоятельно? Если да, то какова реальная цель секретного рейка?

+0

Итак, прежде всего, '('x' * 30)', no no no. Вы можете создать секретный токен, выполнив 'rake secret' в своем приложении, это правильный способ создания секретного токена. Но это не отвечает на большинство вашего вопроса, поэтому я просто оставлю это в качестве комментария здесь. Вы также можете посмотреть цель секретного токена, чтобы вы поняли, что происходит. – jrochkind

ответ

4

Вы запускаете свой сервер локально в процессе разработки или в какой-либо другой среде (например, на производстве Heroku)? Потому что, если вы работаете на Heroku, вам нужно будет удалить secrets.yml из вашего .gitignore, чтобы Heroku мог выяснить, что такое секретный ключ. Безопасный способ обращения с этим - хранить секретный ключ в качестве переменной окружения на Heroku и указывать на него свой secrets.yml (см. Ниже).

Если вы работаете локально, вы должны удалить свой secret_token.rb, если у вас есть secret_key_base для каждой среды внутри вашего файла secrets.yml. Вы не после того, что ваш выглядит, но это должно выглядеть примерно так:

development: 
secret_key_base: somerandomkey 
test: 
secret_key_base: somerandomkey 
staging: 
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> 
production: 
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> 
+0

Привет, Ханна, спасибо за ваш ответ. Я добавил содержимое для secrets.yml и заявил, что моя постановка является разработкой в ​​моем сообщении. –

4

На Rails 4.1, есть new way хранить секреты.

В Rails 4.1+, вам нужно config/secrets.yml - не удаляйте его! Я могу видеть в репозитории GitHub, вы используете Rails 4.2 и этот файл отсутствует. Вот почему вы видите эту ошибку. (Примечание: если у вас все еще есть файл secret_token.rb, удалите его. Rails 4.1+ больше не использует его).

Я рекомендую использовать dotenv rails.

Сложение и совершать конфигурации/secrets.yml:

default: &default 
    secret_key_base: <%= ENV['SECRET_KEY_BASE'] %> 

development: 
    <<: *default 

test: 
    <<: *default 

staging: 
    <<: *default 

production: 
    <<: *default 

Всякий раз, когда вы запускаете рельсы, вы должны убедиться, что вы установили систему SECRET_KEY_BASEenvironement переменная. С помощью вышеуказанного файла YAML вам необходимо убедиться, что эта переменная среды установлена ​​на любом компьютере, запускающем ваше приложение Rails в любой среде. Ключевым моментом является то, что эта , как устанавливается, может варьироваться в зависимости от того, где/на какой машине.

На вашем локальной машины (дома), создайте файл с именем .env с секретом:

echo SECRET_KEY_BASE=`rake secret` > .env 
rails server 

Вам только нужно создать этот файл раз. Когда рельсы начнут, dotenv прочитает этот файл .env и соответствующим образом установит переменную environement SECRET_KEY_BASE.Не делайте этого файла - на самом деле, я рекомендую добавить его в ваш .gitignore.

Позже, когда вы развернете сервер , удалите сервер (сервер производства/развертывания), все будет по-другому. Возможно, вам понадобится использовать SSH для установки переменной окружения. На Heroku вы можете войти в свой app's dashboard и установить значение среды (или использовать config:set в Heroku Toolbelt).

Редактировать:Примечание: Я не придумал это. Это подход, используемый Suspenders.

0

Простой способ сгенерировать маркер и keybase является:

bundle exec rake secret 

Теперь вы получите длинную строку, как:

ddf4a6d37a956089984c8fe6160a6e3c18e48a448a07a50e4ab10a4edd6d3597f13ad9b6e0af4f5723f1ef52bfd2ffa78ab5b815d2bb8b15f14f48e7e307baad

копии же строки, которые вы получили на вашем терминале/CMD

Нет запуска этой команды:

export SECRET_KEY_BASE=ddf4a6d37a956089984c8fe6160a6e3c18e48a448a07a50e4ab10a4edd6d3597f13ad9b6e0af4f5723f1ef52bfd2ffa78ab5b815d2bb8b15f14f48e7e307baad 

rails s -e production 

Всякий раз, когда вы хотите изменить свой секретный ключ выполнив описанные выше шаги. Не записывайте его в файл по соображениям безопасности.

Смежные вопросы