Sitemap_generator не удается загрузить
Я следовал инструкциям на нескольких страницах, чтобы получить карту сайта для генерации и загрузки в мой S3 Bucket. Карта сайта генерируется, но не загружается.
Я использую carrierwave для загрузки, которая отлично работает для загрузки изображений.
Ключевым файлом является файл config/sitemap.rb. Вот мой:
require 'rubygems'
require 'sitemap_generator'
# Set the host name for URL creation
SitemapGenerator::Sitemap.default_host = "https://www.driverhunt.com"
# pick a place safe to write the files
SitemapGenerator::Sitemap.public_path = 'tmp/'
# store on S3 using #Fog# Carrierwave
SitemapGenerator::Sitemap.adapter = SitemapGenerator::WaveAdapter.new
# SitemapGenerator::Sitemap.adapter = SitemapGenerator::S3Adapter.new
# This is a different problem to the one in the question, but using this second adaptor gives the error: "...lib/fog/storage.rb:27:in `new': is not a recognized storage provider (ArgumentError)"
# inform the map cross-linking where to find the other maps
SitemapGenerator::Sitemap.sitemaps_host = "http://#{ENV['S3_BUCKET']}.s3.amazonaws.com/"
# pick a namespace within your bucket to organize your maps
SitemapGenerator::Sitemap.sitemaps_path = 'sitemaps/'
SitemapGenerator::Sitemap.create do
add '/home', :changefreq => 'daily', :priority => 0.9
# add '/contact_us', :changefreq => 'weekly'
end
# SitemapGenerator::Sitemap.ping_search_engines # Not needed if you use the rake tasks
В чем дело? Как отладить загрузку несущей?
1 ответ
Я отвечу на вопрос, поскольку ваш комментарий к S3Adapter привел меня к этой теме, когда я занимался поиском неопознанного провайдера. Если вы вернетесь к комментарию с помощью S3Adapter и выполните следующее, вы получите его работающим.
Если вы не укажете туман ENV VARS для драгоценного камня fog-aws, вы получите ошибку:
ArgumentError: is not a recognized provider
используя в качестве адаптера SitemapGenerator::S3Adapter.new
Установки, которые вы получили выше, совершенно хороши, просто используйте S3Adapter.new вместо WaveAdapter! Ошибка, которую вы получаете (и я тоже получаю), связана с тем, что SitemapGenerator:: S3Adapter использует fog-aws, и для того, чтобы запустить его по умолчанию, у вас должны быть следующие ENV VARS:
ENV['AWS_ACCESS_KEY_ID'] = XXX
ENV['AWS_SECRET_ACCESS_KEY'] = XXX
ENV['FOG_PROVIDER'] = AWS
ENV['FOG_DIRECTORY'] = your-bucket-name
ENV['FOG_REGION'] = your-bucket-region (ex: us-west-2)
Если вы пропустили хотя бы одно из следующих действий, вы получите ошибку:
ArgumentError: is not a recognized provider
В качестве альтернативы, если вы хотите по какой-то причине отказаться от использования ENV VARS, вы должны указать значения при инициализации адаптера следующим образом:
SitemapGenerator::Sitemap.adapter = SitemapGenerator::S3Adapter.new(fog_provider: 'AWS',
aws_access_key_id: 'your-access-key-id',
aws_secret_access_key: 'your-access-key',
fog_directory: 'your-bucket',
fog_region: 'your-aws-region')
Однако, используя только вышеупомянутые ENV VARS, все будет в порядке, и ваш файл сайта будет запущен и запущен. Эта установка была протестирована с версией sitemap_generator: 5.1.0
На ваш вопрос: Загрузка изображений работает, поскольку она не требует точно такой же конфигурации, как WaveAdapter. Я предполагаю, что в вашем файле carrierwave.rb отсутствует следующее:
config.cache_dir = "#{Rails.root}/tmp/"
config.permissions = 0666
Полная конфигурация для инициализатора carrierwave может быть найдена здесь: Генерация файлов Sitemap для файловых систем, доступных только для чтения, таких как Heroku (проверьте, что вы что-то упустили, или используйте другой адаптер)
Однако я считаю, что ваша проблема связана с отсутствием ENV VARS в производственной среде.