Sitemap_generator无法上传

时间:2015-04-22 12:33:46

标签: ruby-on-rails heroku amazon-s3 carrierwave sitemap-generator-gem

我已按照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上传?

1 个答案:

答案 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有关。