Неинициализированная константа 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.

CarrierWave-Google-хранилище GitHub

Я получил ту же ошибку, используя 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 в каталоге инициализаторов.

Добавление ссылок, где я нашел выше решения.

Среднесветный туман

Другие вопросы по тегам