heroku のRails アプリでsitemap.xml を用意するときにはまったこと
heroku での Rails 4 のアプリでsitemap.xml を用意してみました。Rails で sitemap.xml を生成するといえば、sitemap_generator というgem を利用するのが定番らしいです。
heroku でsitemap.xml を利用すると、静的なファイルをherokuでおくことが出来ないので、sitemap.xml を生成して、Amazon S3に用意して対応します
インストールする
Gemfile に追記
S3 へのファイル転送は「fog」というgemを利用します。Amazon S3への転送設定について、「carrierwave」というgemとも共有できます。なぜか、carrierwaveを使わないと転送できなかったです...(本当は出来るらしいんですが)
gem 'sitemap_generator' gem 'carrierwave' gem 'fog'
$ bundle install
設定ファイルを生成
設定ファイルを用意します。雛形を生成してくれます
$ rake sitemap:install
config/sitemap.rb
S3への設定も含むと下記のようになります。 sitemaps_host については、bucket名をURLにきちんと加えておく必要がありました
SitemapGenerator::Sitemap.default_host = "http://app1.herokuapp.com/" SitemapGenerator::Sitemap.sitemaps_host = 'https://s3.amazonaws.com/bucket_name/' SitemapGenerator::Sitemap.public_path = 'tmp/' SitemapGenerator::Sitemap.sitemaps_path = 'sitemaps/' SitemapGenerator::Sitemap.adapter = SitemapGenerator::WaveAdapter.new SitemapGenerator::Sitemap.create do add "/foo" end
config/initializers/carrierwave.rb
- アクセスキーIDと、シークレットアクセスキーを取得しておきます。
- AWS -> アカウント -> セキュリティ証明書
CarrierWave.configure do |config| config.cache_dir = "#{Rails.root}/tmp/" config.storage = :fog config.permissions = 0666 config.fog_credentials = { :provider => 'AWS', :aws_access_key_id => 'xxxxxxxxxxx', :aws_secret_access_key => 'xxxxxxxxxxx', #:region => 'ap-northeast-1' } config.fog_directory = 'bucket_name' end
sitemap.xml を生成する
開発環境などであれば、下記のような方法で生成できます。
この方法だと、GoogleなどにPINGを送りません。また、生成したSitemap.xmlを転送しません
$rake sitemap:refresh:no_ping
本番環境では、下記のような方法で生成できます。
この方法だと、GoogleなどにPINGを送ります。また、生成したSitemap.xmlを転送します
$rake sitemap:refresh
routes.rb を設定
生成が出来ても、S3においたままだと、Google ウェブマスターツールに登録できません。 なので、routes.rb でリダイレクトを設定しておきます。
get 'sitemap', to: redirect('https://s3.amazonaws.com/bucket_name/sitemaps/sitemap.xml.gz')
下記のようなURL でアクセスできます
Google ウェブマスターツールに登録
あとは、登録しておくだけです!
Google Analyticsパーフェクトガイド Ver.5対応版
- 作者: 山浦直宏
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2012/11/27
- メディア: 単行本
- 購入: 4人 クリック: 120回
- この商品を含むブログ (5件) を見る