Herokuのアプリを他のサーバで動かす

今頃になってRuby on Railsの勉強を始めているのですが、適当に作ったアプリを公開するところとしてHerokuを活用させてもらっています。
本格的に運用していこうという時にはHerokuのアプリを別サーバに移すのですが、その方法をメモっておきます。

ここでは、Herokuのアプリをローカルで動かすことを目標とします。

まず Heroku の My Apps 画面から、お目当てアプリの settings を選択し、Import & Export タブからアプリを Export しローカルにダウンロードします。
そして、ダウンロードしたアプリを解凍します。

$ tar app_heroku.tar.gz

解凍された中に tmp と log のディレクトリがないので作ります。

$ mkdir tmp log

また、config/database.yml もないので作ります。HerokuのDBはPostgreSQLですが、ここはSQLite3にしましょう。

$ vi config/database.yml

database.ymlの中身はこんな感じです。

development:
adapter: sqlite3
database: db/development.sqlite3

Herokuで作ったアプリのDBの中身は db/data.yml に入っていますので、ここからデータをロードします。

$ ruby script/plugin install http://opensource.heroku.com/svn/rails_plugins/yaml_db
$ rake db:load
(in /Users/hide/rails/app)

    • create_table("shops", {:force=>true})

-> 0.0897s

    • initialize_schema_information()

-> 0.0059s

    • columns("schema_info")

-> 0.0006s

最初にdb:migrateもしてくれているようです。これでDBの移行は完了です。

$ ruby script/server

動いたー!


また、DBにMySQLを使う場合は以下のようになります。

$ vi config/database.yml

development:
adapter: mysql
database: DB名
host: localhost
username: アカウントID
password: パスワード

次に上で指定したDB名のDBを作ります。

$ mysqladmin create DB名

そしてDBのデータをロードします。

$ rake db:load

これでおkです。

DBの移行がめんどくさいところなのですが、yaml_db を使うことで簡単に移したりできるようになっています。例えばHerokuで rake db:dumpでデータを db/data.yml にダンプして、別サーバで rake db:load するだけでDBの移行は完了です。


参考