herokuにgitでデプロイしてdb:pushするはずだったんですが・・・うまくいきませんでした(涙)
以下、詳細です。
1)まずWindows用のGitをインストールします。
リンク: msysgit - Google Code.
Git on Windows
1-1)まずは自分の鍵を作ります。
これは暗号化のために必要です。先ほどインストールしたGitのGUI版で簡単に作ることができます。場所は以下のとおりです。
2)herokuの説明を読みながら作業します。
リンク: Heroku | Heroku Quickstart Guide.
If you aren’t already using Git to track the app’s revisions, run these commands:
具体的には以下のことをやります:
2-1)Ruby Gems で heroku を入手
$ sudo gem install herokugarden
Successfully installed heroku-0.6
1 gem installed
NetbeansならGUIでインストールできます。場所は以下のとおりです。
2-2)Gitでローカルレポジトリ※を作成
コマンドプロンプトなどでプロジェクトのフォルダに移動し、以下のコマンドを実行すると「.git」というフォルダが作られ、中にいろいろなファイルが作られます。
$ git init
Initialized empty Git repository in .git/
$ git add .
$ git commit -m "new app"
Created initial commit 5df2d09: new app
44 files changed, 8393 insertions(+), 0 deletions(-)
これでローカルレポジトリは準備完了です。
2-3)入手したherokuコマンドでリモートレポジトリ※を作成
$ heroku create
Enter your HerokuGarden credentials.
Email: xxxx@xxxxxx.com
Password:
Uploading ssh public key /Users/joe/.ssh/id_rsa.pub
これでうまくいっているはずなのですが、私は何回やっても、うまくいきませんでした。そこで、以下のようにしてherokuを作り直しました。
$ git remote rm heroku
$ git remote add heroku git@herokugarden.com:xxxxxxx-xxxxxxx.git
2-4)heroku pushコマンドでローカルリポジトリのデータをリモートレポジトリに移す
これはherokugardenのときとは違い、すんなりいきます。ただし、データベースのマイグレーションはやってくれません。
$ git push heroku
Enter passphrase for key:Counting objects: 65, done.
Compressing objects: 100% (58/58), done.
Writing objects: 100% (65/65), 80.54 KiB, done.
Total 65 (delta 14), reused 0 (delta 0)
-----> Heroku receiving push
-----> Rails app detected
Compiled slug size is 0.1MB
-----> Launching....... done
App deployed to Heroku
To git@heroku.com:vivid-mountain-91.git
* [new branch] master -> master
リモートレポジトリにファイルが移りました。さらに、リモート(heroku)でのマイグレーションもやってしまいましょう。
$ heroku rake db:migrate
(in /disk1/home/slugs/16476_c023ffc_5753/mnt)
== 20090517153552 CreateChoices: migrating ====================================
-- create_table(:choices)
-> 0.1739s
== 20090517153552 CreateChoices: migrated (0.1741s) ===========================
== 20090518044040 CreateParagraphComments: migrating ==========================
-- create_table(:paragraph_comments)
-> 0.0135s
== 20090518044040 CreateParagraphComments: migrated (0.0136s) =================
== 20090518054531 CreateParagraphs: migrating =================================
-- create_table(:paragraphs)
-> 0.0117s
== 20090518054531 CreateParagraphs: migrated (0.0118s) ========================
2-5)さらに、データベースの中身をリモートに移します。
herokuサイトの説明どおりやろうとすると以下のように怒られます。
$ heroku db:push
Install the Taps gem to use db commands. On most systems this will be:
sudo gem install taps
Tapsというgemをインストールしなければならないようです。普通にコマンドプロンプトからインストールできますが、Netbeansで探してみました。
これですね。インストールしてもう一度チャレンジしてみます。
$gem install taps
Install required dependency sinatra? [Yn] Y
Install required dependency rack? [Yn] Y
Install required dependency fcgi? [Yn] Y
Building native extensions. This could take a while...
ERROR: While executing gem ... (Gem::Installer::ExtensionBuildError)
ERROR: Failed to build gem native extension.
ruby extconf.rb install taps
checking for fcgiapp.h... no
checking for fastcgi/fcgiapp.h... no
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers. Check the mkmf.log file for more
details. You may need configuration options.
・・・インストールできません。困りました。なんだかCのプログラムをコンパイルしようとしているように見えるんですが・・・しかたないので検索してみると、こんなページを発見。
リンク: Helpdesk :: Installing the latest Heroku gem on Windows.
Now that we include the taps gem, the heroku client has several new dependencies - most notably taps.
しかしこの内容は最新のheroku gemをインストールする方法を書いているだけでした。書いてある通りにしてもデータベースの中身を移すことはできませんでした。いろいろ調べてみましたがTapsをWindowsにインストールする方法は今のところなさそうです。
仕方ないのでローカルのデータベースをyamlファイルにエクスポートしてテストフィクスチャに入れてしまい、リモートでrake db:fixtures:loadすることを試みます(herokugardenをやめた意味がない・・・)。
Railsコンソールを開いてyamlファイルを作っていきます。
>> f = File.open('choice.yml', "w")
f = File.open('choice.yml', "w")
=> #<File:choice.yml>
>> f.print Choice.find(:all).to_yaml
f.print Choice.find(:all).to_yaml
=> nil
>> f.close
f.close
=> nil
このファイルをtest/fixturesフォルダに入れて、rake db:fixtures:loadしてみますが・・・
rake aborted!
Bad data for Choice fixture named #<YAML::Object:0x47e832c> (nil)
もうダメです。寝ます・・・
※
これについては、以下の記事がとてもわかりやすいイメージを載せてくれています。
リンク: せっかちな人のための git 入門 - git をインストールし、共同で開発できる環境を整えるまで : 僕は発展途上技術者.
mac% git push origin master (master を origin にプッシュするという意味)