Неинициализированная константа CarrierWave::Storage::Fog с Google Cloud Storage
Я видел множество других людей, имеющих подобные проблемы со мной, но ни одно из перечисленных решений не применимо, поэтому я надеюсь, что это удивительное сообщество может помочь мне.
Я пытаюсь использовать гем sitemap_generator, но я размещаю его на Heroku, поэтому я пытаюсь следовать их документации здесь, чтобы использовать Carrierwave для загрузки карт сайта в Google Cloud Storage. Я уже использую Google Cloud для загрузки своих изображений со всеми работами, поэтому я надеялся, что это будет просто, однако файлы не загружаются. В документации сказано, что вам нужно добавить:
config.storage = :fog
Однако в ваш конфигурационный файл carrierwave при каждом добавлении я получаю следующую ошибку:
gems/carrierwave-49fdad1ec6ca/lib/carrierwave/uploader/configuration.rb:75:in `eval': uninitialized constant CarrierWave::Storage::Fog (NameError)
Мой конфиг Carrierwave выглядит так:
CarrierWave.configure do |config|
config.cache_dir = "#{Rails.root}/tmp/"
config.storage = :fog
config.fog_credentials = {
:provider => 'Google'
}
config.fog_directory = 'bucket-name'
config.asset_host = 'https://domain.storage.googleapis.com'
end
(fog_directory и asset_host заменены фиктивными значениями)
И в моем файле драгоценного камня у меня есть:
gem 'fog'
gem 'carrierwave', github: 'carrierwaveuploader/carrierwave'
Я видел много людей, использующих AWS с одной и той же ошибкой, но их решение состоит в том, чтобы перейти на использование туманного камня вместо fog-aws (что я уже делаю) и требовать fog/aws. Я проверил это так:
gem 'fog', require: 'fog/google'
Но все же есть та же проблема.
Кто-нибудь может подсказать, что я могу сделать, чтобы попытаться решить эту проблему? Любая помощь будет принята с благодарностью!
Большое спасибо
1 ответ
Я знаю, что этому посту 7 месяцев, но я потратил впустую 36 часов, пытаясь реализовать тот же самый камень... не повезло. Кажется, документация немного устарела.
Если ты спросишь меня, fog-google
в этом нет необходимости!
Попробуйте этот драгоценный камень для интеграции CarrierWaveUploader с Google.
Я получил ту же ошибку, используя fog-aws для Amazon S3. Кажется, эта ошибка возникает, если хранилище запотело, не имеет значения, что это Amazon S3 или Google Cloud.
Я использовал carrierwave gem для загрузки изображения профиля пользователя, поэтому решил эту проблему путем перемещения конфигурации хранилища после настройки учетных данных, как показано ниже:
CarrierWave.configure do |config|
if Rails.env.staging? || Rails.env.production?
config.fog_provider = 'fog/aws'
config.fog_credentials = {
provider: 'AWS',
aws_access_key_id: ENV['AWS_ACCESS_KEY_ID'],
aws_secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'],
region: ENV['AWS_REGION']
}
config.storage = :fog
config.fog_directory = ENV['S3_BUCKET']
config.fog_public = true
config.fog_attributes = { cache_control: "public, max-age=#{365.days.to_i}" }
else
config.storage = :file
config.enable_processing = Rails.env.development?
end
end
Другое решение было добавить require 'carrierwave/storage/fog'
вверху, в файле выше. Для меня файл был carrier_wave.rb в каталоге инициализаторов.
Добавление ссылок, где я нашел выше решения.