Ответ 1
Вы хотите использовать config var до (во время компиляции), который он фактически сделал доступным для вашего приложения (во время компиляции пула).
Попробуйте включить Heroku Labs: user-env-compile
Я подозреваю, что это решит проблему.
Этот gist на не контролирует ваши секретные ключи - это потрясающе, и я использовал его несколько раз для более длительного управления версиями секретных ключей rails -base.
Я попытался использовать его для разработки secret_key на heroku, и моя попытка потерпела неудачу. Он отлично работает в dev, но отказался разрешить мне нажать на герою - заявив, что созданный ключ, который я создал (так же, как и в gist выше), не был установлен.
Я работал с секретным секретным ключом (проверен на git), но не тогда, когда использовал следующее:
Devise.setup do |config|
config.secret_key = ENV['DEVISE_SECRET_KEY']
...
(с соответствующей переменной окружения triple-checked, которая была там)
Кажется, что он не прекомпилирует активы во время push to heroku
$ git push heroku master
... (bundle stuff here)
Running: rake assets:precompile
rake aborted!
Devise.secret_key was not set. Please add the following to your Devise initializer:
config.secret_key = '0cfa796871e0...
/tmp/build_.../vendor/bundle/ruby/1.9.1/gems/devise-3.1.1/lib/devise/rails/routes.rb:446:in `raise_no_secret_key'
/tmp/build_.../vendor/bundle/ruby/1.9.1/gems/devise-3.1.1/lib/devise/rails/routes.rb:195:in `devise_for'
/tmp/build_.../config/routes.rb:2:in `block in <top (required)>'
...( rest of the long stacktrace with little of interest here)
ошибка возникает при запуске "devise_for" в каталоге маршрутов. соответствующая строка:
MyApp::Application.routes.draw do
devise_for :users, :path_names => { :sign_in => 'login', :sign_out => 'logout'}
Соответствующая строка в самом оригинальном драгоценном камне:
raise_no_secret_key unless Devise.secret_key
Так что это действительно проверка, если secret_key установлен.
просто для подтверждения... Я проверил конфигурацию heroku, и на самом деле я поставил секретный ключ в среду под этим именем.
DEVISE_SECRET_KEY: 3f844454bee...(more here)
RAILS_SECRET_KEY_BASE: 04bf569d4e...(more here)
потому что он в задаче rake вместо приложения - я предполагаю, почему он не может попасть в ENV???
любые идеи о том, где я могу начать искать решение?
Вы хотите использовать config var до (во время компиляции), который он фактически сделал доступным для вашего приложения (во время компиляции пула).
Попробуйте включить Heroku Labs: user-env-compile
Я подозреваю, что это решит проблему.
Если он прерывается во время компиляции, вам необходимо включить user-env-compile, heroku labs:enable user-env-compile
, чтобы сделать среду доступной, когда приложение загружается для компиляции активов.
Функция пользовательской компиляции лабораторий больше не доступна на Heroku.
Я использую Ruby 2.2.2p95 и Rails 4.2.4.
Что для меня работало, в config/initializers/devise.rb:
config.secret_key = ENV['DEVISE_SECRET_KEY'] if Rails.env.production?
Затем добавьте конфигурацию DEVISE_SECRET_KEY var в heroku, установите все, что вы хотите. Хорошая практика состоит в том, чтобы сгенерировать что-то с той же длиной, что и значение по умолчанию для разработки и теста.
Надеюсь, что это поможет.