0

我正在使用sitemap_generator在我的 RoR 项目中生成站点地图。到目前为止一切正常。我在 Heroku 上托管我的项目,它不允许写入本地文件系统。我仍然需要一些写入权限,因为站点地图文件需要在上传之前写出来。但我必须使用 microsoft azure 来存储我的站点地图。sitemap_generator 中列出的适配器不包括 azure。有人能指出我为 azure 编写适配器的正确方向吗?

参考本文中的“配置载波”,我对代码进行了一些更改。

但我不确定只编辑初始化文件是否有帮助。在上面的文章中,Carrierwave 指向 WaveAdapter 它使用 CarrierWave::Uploader::Base 上传到 CarrierWave 支持的任何服务

配置/初始化程序/azure.rb

Azure.configure do |config|
    config.cache_dir = "#{Rails.root}/tmp/"
    config.storage = :microsoft_azure
    config.permissions = 0666
    config.microsoft_azure_credentials = {
       :provider               => 'azure',
       :storage_account_name      => 'your account name',
       :storage_access_key  => 'your key',
    }
    config.azure_directory  = 'container name'
end

请帮忙!

4

1 回答 1

0

我从S3 适配器Azure 的 ruby​​ 示例中复制了我的设置

将 azure blob gem 添加到您的 Gemfile: gem 'azure-storage-blob'

创建 config/initializers/sitemap_generator/azure_adapter.rb:

require 'azure/storage/blob'

module SitemapGenerator
  # Class for uploading sitemaps to Azure blobs using azure-storage-blob gem.
  class AzureAdapter
    #
    # @option :storage_account_name [String] Your Azure access key id
    # @option :storage_access_key [String] Your Azure secret access key
    # @option :container [String]
    def initialize
      @storage_account_name = 'your account name'
      @storage_access_key = 'your key'
      @container = 'your container name (created already in Azure)'
    end

    # Call with a SitemapLocation and string data
    def write(location, raw_data)
      SitemapGenerator::FileAdapter.new.write(location, raw_data)

      credentials = {
        storage_account_name: @storage_account_name,
        storage_access_key: @storage_access_key
      }

      client = Azure::Storage::Blob::BlobService.create(credentials)
      container = @container
      content = ::File.open(location.path, 'rb') { |file| file.read }
      client.create_block_blob(container, location.filename, content)
    end
  end
end
  • 确保您在 Azure 中创建的容器是“blob”容器,因此该容器不是公开的,但其中的 blob 是公开的。

然后在 config/sitemaps.rb 中:

SitemapGenerator::Sitemap.sitemaps_host = 'https://[your-azure-address].blob.core.windows.net/'
SitemapGenerator::Sitemap.sitemaps_path = '[your-container-name]/'
SitemapGenerator::Sitemap.adapter = SitemapGenerator::AzureAdapter.new

应该这样做!

于 2019-02-02T01:05:44.557 回答