2015-02-27 2 views
9

Являются ли secret_key_base и secret_token необходимыми для производства в Rails 4.2? не Установка ни вызывает следующее сообщение об исключении:Использует ли Rails 4.2 secret_token?

Missing secret_token и secret_key_base для 'производств' среды, установить эти значения в config/secrets.yml

Руководство 4.2 Обновления (http://railsapps.github.io/updating-rails.html) говорит, что это:

Когда вы создаете новое приложение Rails, используя новую команду rails, создается уникальный секретный ключ и записывается в config/initializers/secret_token.rb файл.

Но такой файл не был создан, когда я создал мое приложение, и нет ссылки на secret_token в конфигурации/secrets.yml

Я предполагаю, что сообщение об ошибке неправильно, и что только secret_key_base необходим. Когда я запускаю свое приложение на производстве на своей машине dev, он начинается с secret_key_base, но в Engineyard установка secret_key_base (через переменную окружения) не работает. Я все еще получаю ошибку.

ответ

4

Проблема, которую вы видите на Engine Yard, связана с тем, что по умолчанию переменная среды secret_key_base не существует. Это то, над чем мы работаем. Вы можете положить это на свое место, используя собственный шеф-повар; Я предлагаю поговорить с нашей службой поддержки для получения дополнительной информации об этом.

Что касается фактической ошибки, которую вы получаете, я только что протестировал новое приложение Rails 4.2 («rails new foo»), чтобы узнать, генерирует ли он secret_token.rb, чего нет. Я думаю, что вам нужно здесь создать конфигурационный/secrets.yml, и этот файл должен выглядеть следующим образом:

development: 
    secret_key_base: somekey 

test: 
    secret_key_base: someotherkey 

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

Теперь, когда вы видите ENV [ «SECRET_KEY_BASE»], что где Engine Yard имеет немного твист - мы пока не предоставляем это из коробки.Пока ваше репо является приватным, вы можете скомпрометировать что-то там самостоятельно. В противном случае использование пользовательского шеф-повара может привести вас в квадрат, создав секретную базу ключей и помещая ее в сценарий оболочки, ответственный за запуск ваших рабочих процессов приложения (например, config/env.custom на нашей платформе).

Надеюсь, это поможет.

+1

Кроме того, это может ответить на некоторые ваши вопросы о secret_token vs. secret_key_base: http://guides.rubyonrails.org/upgrading_ruby_on_rails.html#action-pack –

+0

Спасибо за быстрый ответ. Я не получил файл secret_token.rb, когда я сгенерировал приложение, либо (поэтому я предполагаю, что он больше не используется), и мой автоматически сгенерированный файл secrets.yml выглядит так же, как и то, что вы разместили здесь. Что касается не поддержки ENV ["SECRET_KEY_BASE"] из коробки, могу ли я использовать драгоценный камень dotenv, а не помещать его в файл? –

+0

Камни dotenv не будут работать на нашей платформе, потому что у нас есть собственные скрипты-оболочки, которые мы используем для установки переменных среды до выполнения сервера приложений (например, Unicorn). Поэтому, пока он будет работать в разработке на вашей локальной машине, в процессе производства вам необходимо изменить/data/ /shared/config/env.custom, который является файлом, который ДОЛЖЕН быть изменен пользовательским шеф-поваром, поскольку все файлы должны обрабатываться поскольку одноразовое и конфигурационное управление считается наилучшей/необходимой практикой. –

0

Я бы предложил повторно создать новое приложение с установленной версией Rails.

Этот файл был автоматически сгенерирован в моем последнем проекте:

# config/secrets.yml 
# Be sure to restart your server when you modify this file. 

# Your secret key is used for verifying the integrity of signed cookies. 
# If you change this key, all old signed cookies will become invalid! 

# Make sure the secret is at least 30 characters and all random, 
# no regular words or you'll be exposed to dictionary attacks. 
# You can use `rake secret` to generate a secure secret key. 

# Make sure the secrets in this file are kept private 
# if you're sharing your code publicly. 

development: 
    secret_key_base: fooooo 

test: 
    secret_key_base: fooooo 

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

Я также рекомендую вам сравнить созданные файлы с помощью railsdiff сайта (например: http://railsdiff.org/4.1.10.rc2/4.2.1.rc2), как это звучит, как вы обновляете от более старой версии.

+1

Я использую Rails 4.2.0, и у меня есть один и тот же сгенерированный автоматически secrets.yml файл, который вы показывается. Но по моему вопросу, где секретные_токены вступают в игру? В сообщении об ошибке указано, что оба параметра, которые я предполагаю, неверны. В руководстве по обновлению указано, что файл config/secret_token.rb в сгенерированном состоянии - есть ли в вашем приложении? –

+1

Вы ссылаетесь на неофициальный источник - сайт railsapp устарел, следовательно, проблема, которую вы видите. Нет файла 'secret_token.rb', созданного в соответствии с генератором приложения (по умолчанию это). См. Ответ Austin Hughey для подробной информации о Engine Engine. Благодаря! –

+1

ОК, спасибо, Майкл. Но FYI - фактическое сообщение об ошибке, созданное Rails 4.2, также говорит о том, что оба должны быть установлены (указаны в моем исходном вопросе), так что это немного запутанно. –

2

4.2 использует секретный ключ, а ссылка, которую вы разместили, имеет решение, которое вы ищете.

В среде, в которой нет секретного ключа, вам необходимо сгенерировать его с помощью rake secret, а затем поместить вывод с консоли в файл config/initializers/secret_token.rb (вы можете создать его, если его нет).

У вас есть возможность избежать использования secrets.yml. Многие люди предпочитают использовать другой драгоценный камень/процедуру (например, figaro) для обработки секретной информации. Чтобы упростить свою жизнь, вы можете просто поместить эту информацию в файл secret_token.rb и двигаться дальше - или вы можете изучить различные идиоматические способы обработки ситуации.

+1

Но почему сообщение об ошибке Rails говорит, что необходимо установить как secret_key_base, так и secret_token? Это просто ошибка? И я использую переменную среды для установки secret_key_base в secrets.yml, вместо того, чтобы класть ключ в файл. Таким образом, мне не нужно gitignore, и мне не нужно вручную воссоздавать его при каждом развертывании. –

+0

@JPlato Я думаю, что ошибка просто ссылается на secret_key_base и secret_token отдельно, но традиционно вы просто устанавливаете secret_key_base в файле secret_token.rb. Честно говоря, я не слишком уверен в специфике ошибки, я просто знаю, что у меня есть приложение 4.2, использующее эту secret_key_base, и почти не заметило его конфигурации во время моего развертывания. Поэтому решение должно быть простым, и кажется, что сообщение об ошибке просто заставляет вещи казаться более запутанными, чем они должны быть. Я также обновил свой ответ, чтобы быть более ясным. – Ecnalyr

+1

Спасибо, @Ecnalyr. Я думаю, что ты прав. Я думаю, что проблема, с которой я столкнулся, по поводу ответа Дж. Остина Хьюгли, заключается в невозможности этого сделать из-за ENV. –

2

По крайней мере, Rails 4.2.2 дал мне ту же ошибку, но установка переменной окружения SECRET_KEY_BASE в файле rails пользователя .bash_profile решить эту проблему для меня, поэтому немного о secret_token кажется, поддельным - пережиток более ранних версий , вероятно.

Генерирование тайну, командуя rake secret, а затем использовать сгенерированный код в файле .bash_profile так:

export SECRET_KEY_BASE='the_output_of_the_rake_secret_command' 
Смежные вопросы