タグ : Heroku

[Heroku] cedar-14 stack に migrate

手持ちの Heroku アプリを cedar-14 スタックにマイグレートしました。

cedar-14 スタックに変更

$ heroku stack:set cedar-14 -a your-app-name
Stack set. Next release on your-app-name will use cedar-14.
Run `git push heroku master` to create a new release on cedar-14.

git push するために空 commit

$ git commit --allow-empty -m "Upgrading to Cedar-14"
[master a9ae9cb] Upgrading to Cedar-14

Heroku へ deploy

$ git push heroku master

stack を確認

$ heroku stack
=== your-app-name Available Stacks
* cedar-14

手軽にマイグレートできる Heroku は素晴らしい。

Heroku コマンドのバージョンアップ

cedar-14 stack に変更しようとしたら stack:set がないというエラーが出たので heroku コマンドをバージョンアップしました。


$ heroku stack:set cedar-14 -a your-app-name
 !    `stack:set` is not a heroku command.
 !    See `heroku help` for a list of available commands.

heroku コマンドのバージョン確認

$ heroku version
heroku-toolbelt/3.7.2 (x86_64-darwin10.8.0) ruby/1.9.3

heroku コマンドのバージョンアップ

$ heroku update
Installing Heroku Toolbelt v4... done.
For more information on Toolbelt v4: https://github.com/heroku/heroku-cli
Setting up node-v4.1.0...done
Installing core plugins heroku-apps, heroku-fork, heroku-git, heroku-local, heroku-run, heroku-status... done
Your version of git is Which has serious security vulnerabilities.
More information here: https://blog.heroku.com/archives/2014/12/23/update_your_git_clients_on_windows_and_os_x
Setting up node-v4.1.0...done
Updating plugins... done

使えないコマンドでエラーが発生するというようなことが起こらないと heroku コマンドのバージョンアップなんて滅多にしないですよね。

[Heroku] CloudFlareを利用したルートドメインの設定方法

“Action Required: Legacy Routing End of Life” というメールを受信している方も多いと思いますが、DNS の Aレコードで Heroku のレガシーな IP アドレスを指定するルーティングの方法が廃止されました。

僕は、Heroku の独自ドメインの設定方法という記事で書いているようなレガシールーティングを使って、Heroku 上に bakorer.com という About me ページを運用していました。レガシールーティングが廃止されるということで、別の方法でルートドメインの設定をする必要がでてきました。

Heroku はドキュメントが手厚く、カスタムドメインを設定する方法は公式サイトに書いてあります。

Custom Domains | Heroku Dev Center

外部サービスを利用する方法がいくつか存在するのですが、今回はその中の1つである CloudFlare を使ってルートドメインを Heroku にホスティングしているアプリに割り当ててみました。

CNAME Flattening: RFC-compliant support for CNAME at the root – CloudFlare Support

CloudFlare に登録する

まず、CloudFlare のアカウントを作成して下さい。

Home | CloudFlare | The web performance & security company

CloudFlare にウェブサイトを追加する



CloudFlare でDNSレコードを設定する


既存のDNSレコードから bakorer.com 向けの a レコードを削除して、代わりに CNAME レコードに Heroku でホスティングしているアプリのサブドメイン bakorer-com.herokuapp.com を指定します。(一番上)


CloudFlare のプラン選択

プラン選択です。SSL を使わなくていいなら、DNS の設定だけだと無料で使えるようなので、Free プランを選択します。無料バンザイ!


CloudFlare のプラン選択



切替前は、ムームードメインのDNSサーバーを利用していて dns01.muumuu-domain.com. dns02.muumuu-domain.com. を確認できます。

dig bakorer.com NS
; <<>> DiG 9.8.3-P1 <<>> bakorer.com NS
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58368
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 2
;bakorer.com.			IN	NS
bakorer.com.		2317	IN	NS	dns01.muumuu-domain.com.
bakorer.com.		2317	IN	NS	dns02.muumuu-domain.com.
dns01.muumuu-domain.com. 284	IN	A
dns02.muumuu-domain.com. 1207	IN	A
;; Query time: 30 msec
;; WHEN: Sat Sep 20 23:31:11 2014
;; MSG SIZE  rcvd: 163

それをムームードメインの管理画面から下記のように「GMOペパボ以外のネームサーバーを使用する」の項目から、lina.ns.cloudflare.com. と jerry.ns.cloudflare.com. を設定します。

ネームサーバ設定変更   ムームードメイン

設定後、dig コマンドでネームサーバーが切り替わっていることを確認します。

dig bakorer.com NS
; <<>> DiG 9.8.3-P1 <<>> bakorer.com NS
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58368
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 2
;bakorer.com.			IN	NS
bakorer.com.		3600	IN	NS	lina.ns.cloudflare.com.
bakorer.com.		3600	IN	NS	jerry.ns.cloudflare.com.
lina.ns.cloudflare.com.	919	IN	A
jerry.ns.cloudflare.com. 3507	IN	A
;; Query time: 389 msec
;; WHEN: Sun Sep 21 00:14:42 2014
;; MSG SIZE  rcvd: 114

最後に、CloudFlare のページからもネームサーバーが切り替わったことが確認できます。


上画像の状態から、Re-test をクリックして下記のように切り替わればネームサーバーの設定は完了です。


CloudFlare を使うことでカンタンに Heroku でルートドメインを設定することができました。CloudFlare は CDN の無料枠もあるようなので、今度はそちらの機能も活用していきたいと思います。


CloudFlare使ってHerokuでルートドメイン使おう – PILOG

[Heroku] Action Required: Legacy Routing End of Life

Heroku で About me サイト http://bakorer.com/ を動かしているのですが、DNS の Aレコードで Heroku のレガシーな IP アドレスを指定するルーティングの方法が 2014/09/22 で廃止されるそうです。bakorer.com のようなネイキッドドメインを Heroku で使うにはひと工夫しないといけなくなりました。

CDN サービス「CloudFlare」を使うと CNAME flattening を実現できるそうなので、詳しくは下記の記事を参考に対応したいと思います。

妻のパン屋のwebサイトをいろいろ更新した話 ~Rails 4アップデートとかサイトの高速化とか~ – give IT a try

以下、Heroku からの「Action Required: Legacy Routing End of Life」お知らせメールです。

Hi there,

This is a reminder that Heroku is turning off the legacy “.heroku.com” routing path on September 22nd 2014. This is part of an effort to to standardize on a single, fast, highly available and scalable routing stack for all customers.

You are receiving this email because one or more of your apps is still using the legacy routing and you must take action to ensure continued operation of those apps after the September 22nd deadline.

The following domains which are still receiving legacy traffic are:


Also, you may use the Legacy Routing Analyzer to see which of your apps are affected. Login to your Heroku account and click here.

We recommend that you migrate those affected apps away from the legacy routing infrastructure as soon as possible.

For instructions on how to make the move, please visit this Heroku Dev Center article.

We know that changing DNS settings for live apps requires care and planning, and we will assist with guidance and advice for you to make the necessary updates. If you have any questions about this topic, feel free to open a support ticket.

We will continue to send reminders in the coming months to owners and collaborators on apps that continue to use the legacy routing infrastructure.

Heroku team

[Heroku] Ruby on Rails 4 + Mongoid + MongoHQ で「500 Internal Server Error」

Ruby on Rails 4 + Mongoid + MongoHQ on Heroku という環境で、1stデプロイしたら初っ端から「500 Internal Server Error」に遭遇しました。


 app/web.1:  I, [2014-02-11T01:13:25.785412 #2]  INFO -- : Started GET "/" for at 2014-02-11 01:13:25 +0000 
 app/web.1:  I, [2014-02-11T01:13:25.790612 #2]  INFO -- : Processing by VideosController#index as HTML 
 app/web.1:  I, [2014-02-11T01:13:25.817544 #2]  INFO -- :   Rendered videos/index.html.haml within layouts/application (3.9ms) 
 app/web.1:  I, [2014-02-11T01:13:25.817786 #2]  INFO -- : Completed 500 Internal Server Error in 27ms 
 app/web.1:  F, [2014-02-11T01:13:25.819195 #2] FATAL -- :  
 app/web.1:  ActionView::Template::Error (:consistency is an unknown option. Valid options  :max_retries, :pool_size, :retry_interval, :refresh_interval, :down_interval, :ssl, :timeout, :instrumenter, :auto_discover.): 
 app/web.1:       9:     %th 
 app/web.1:      10:     %th 
 app/web.1:      11:  
 app/web.1:      12:   - @videos.each do |video| 
 app/web.1:      13:     %tr 
 app/web.1:      14:       %td= video.name 
 app/web.1:      15:       %td= video.url 
 app/web.1:    app/views/videos/index.html.haml:12:in `_app_views_videos_index_html_haml___1990342454341184297_70073653532820'

どうやら、conf/mongoid.yml の書き方が良くなかったみたいです。

MongoHQ 向けの動かない conf/mongoid.yml

      uri: <%= ENV['MONGOHQ_URL'] %>
        consistency: :strong
        max_retries: 1
        retry_interval: 0

↓ 修正

MongoHQ 向けの正常動作する conf/mongoid.yml

      uri: <%= ENV['MONGOHQ_URL'] %>

options の何がダメだったのか詳しく追ってないので、時間を見付けて最適なオプションを調べたいです。


500 Internal Server Error using MongoLab + Rails 4 + Mongoid on Heroku – Stack Overflow

[Heroku] master以外のbranchをpushする方法

Heroku に master ブランチ以外のブランチをプッシュする方法を調べたのでメモ。

git push heroku branch_name:master