Рельсы capistrano 3 + rvm1-capistrano3 4.1 проблема переменных среды секретов.yml
Я развертывал приложение rails 4.1 с capistrano 3. Работало нормально. но когда я попытался выполнить грабли (для комментария требуется "capistrano/rails/assets"). я получаю эту ошибку
cap aborted!
SSHKit::Runner::ExecuteError: Exception while executing on host xxx.xxx.xxx.xxx: rake exit status: 1
rake stdout: Nothing written
rake stderr: config.eager_load is set to nil. Please update your config/environments/*.rb files accordingly:
* development - set it to false
* test - set it to false (unless you use a tool that preloads your test environment)
* production - set it to true
rake aborted!
ArgumentError: Missing required arguments: google_storage_access_key_id, google_storage_secret_access_key
/home/deploy/yelo/shared/bundle/ruby/2.1.0/gems/fog-core-1.24.0/lib/fog/core/service.rb:237:in `validate_options'
/home/deploy/yelo/shared/bundle/ruby/2.1.0/gems/fog-core-1.24.0/lib/fog/core/service.rb:261:in `handle_settings'
/home/deploy/yelo/shared/bundle/ruby/2.1.0/gems/fog-core-1.24.0/lib/fog/core/service.rb:98:in `new'
/home/deploy/yelo/shared/bundle/ruby/2.1.0/gems/fog-core-1.24.0/lib/fog/storage.rb:26:in `new'
/home/deploy/yelo/shared/bundle/ruby/2.1.0/gems/carrierwave-0.10.0/lib/carrierwave/uploader/configuration.rb:83:in `eager_load_fog'
/home/deploy/yelo/shared/bundle/ruby/2.1.0/gems/carrierwave-0.10.0/lib/carrierwave/uploader/configuration.rb:96:in `fog_credentials='
/home/deploy/yelo/releases/20140910131617/config/initializers/carrierwave.rb:8:in `block in <top (required)>'
/home/deploy/yelo/shared/bundle/ruby/2.1.0/gems/carrierwave-0.10.0/lib/carrierwave/uploader/configuration.rb:118:in `configure'
/home/deploy/yelo/shared/bundle/ruby/2.1.0/gems/carrierwave-0.10.0/lib/carrierwave.rb:14:in `configure'
/home/deploy/yelo/releases/20140910131617/config/initializers/carrierwave.rb:5:in `<top (required)>'
/home/deploy/yelo/shared/bundle/ruby/2.1.0/gems/activesupport-4.1.4/lib/active_support/dependencies.rb:241:in `load'
/home/deploy/yelo/shared/bundle/ruby/2.1.0/gems/activesupport-4.1.4/lib/active_support/dependencies.rb:241:in `block in load'
config.eager_load имеет значение true. вещь с google_storage_access_key_id ключи инициализируются внутри инициализатора со значениями config.secrets.yml
require 'fog'
require 'rails'
require 'carrierwave'
CarrierWave.configure do |config|
config.root = Rails.root.join('tmp')
config.cache_dir = 'carrierwave'
config.fog_credentials = {
:provider => 'Google',
:google_storage_access_key_id => Rails.application.secrets.storage_access_key,
:google_storage_secret_access_key => Rails.application.secrets.storage_access_secret
}
config.fog_directory = 'yelostore'
end
config.secrets.yml
storage_access_key: <%= ENV['STORAGE_ACCESS_KEY']%>
storage_access_secret: <%= ENV['STORAGE_ACCESS_SECRET']%>
я сохранил свои переменные среды в /etc/profile.
проблемы возникают, только если я делаю рейк или выполняю задачи. если я удалил файл инициализатора, я получаю другую ошибку. Devise.secret_key не был установлен. Пожалуйста, добавьте следующее в ваш инициализатор Devise:
config.secret_key = '6b88a299ed1361b5c0275e.....'
это существенно потому, что secret_key_base: <% = ENV ["SECRET_KEY_BASE"]%> не загружается в этот момент.
Наконец, я могу выполнить все задачи, я иду к корневому пути. только при этом через капистарно эти ошибки возникают. поскольку capistarno не получает переменные config.scecrets env, которые хранятся в / etc / profile
2 ответа
Ошибка не имеет ничего общего с secret_key_base. В файле config/initializers/devise.rb добавьте config.secret_key='6b88...' в блоке установки:
Devise.setup do |config|
config.secret_key = '6b88a299ed1361b5c0275e...'
...
end
Похоже, что capistrano рассматривает переменные окружения из /etc/environment, а не из оболочки, поэтому bashrc или профиль не работают.
Проблема config.eager_load была решена после того, как я обновился до capistrano 3.0rc до 3.2