我已按照couple of pages上的说明操作,以获取站点地图生成并上传到我的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
发生了什么?如何调试carrierwave上传?
答案 0 :(得分:3)
我将回答这个问题,因为当我搜索无法识别的提供商时,您对S3Adapter的评论将我带到了这个主题。如果您使用S3Adapter重新开启评论并执行以下操作,您将使其正常工作。
如果您没有为 fog-aws gem 指定任何雾ENV VARS ,您将收到错误消息:
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初始化程序的完整配置: Generate Sitemaps on read only filesystems like Heroku(检查您是否遗漏了某些内容或使用其他适配器)
但是,我认为您的问题与生产环境中缺少ENV VARS有关。