2012年4月27日金曜日

herokuでsqlite3を使おうとしたら詰んだ

-----

追記:Redis To Go を SQliteのかわりに使ったらわりと簡単に実装できました。
このアドオンおすすめです。

使い方もドキュメントに簡単に書いてある。
https://devcenter.heroku.com/articles/redistogo

-----

結論から言うと、herokuでsqlite3は使えないらしい。
postgresqlを使うらしい。

何時間もこれで詰んでたからすごく悲しい。

herokuマスターにたずねたところ、Redis To Goというherokuアドオンを代わりに使うとよいみたいです。これはNoSQLデータベースの一種で、ハッシュをデータベースのように扱えるようにしたようなかんじのものらしい。

使い方あんまりわからないので、HerokuでMySQL使えるようにした方が楽なのかなあと思ったり。

2012年4月25日水曜日

HerokuにRubyのコードをUPする

----
追記:
現段階では動いてはいますがサイトURLに飛べないです。
アプリケーションエラーがまだ消えてませんでした。

追記の追記:
プログラムを動かしながら、webプロセスを確保するには2dyno必要らしいので、課金しないとむりっぽいです。workingのdynoを1、webのdynoを1確保します。
その後、Procfileにあたらしくwebアプリに関する記述を追加し、
(私は「web: bundle exec thin start -p $PORT -e $RACK_ENV」って書いております)
$ heroku ps:scale web=1
とかすれば飛べるようになります。
でもherokuではプログラムからjsonへの書き出しが保証されていないみたいで、
結局この方法では実装できなかったという…w

----

RailsアプリをHerokuにUpしている例はたくさんあったのですが、RubyでかかれたコードをUpしている例は少なかったのでメモ。

はじめ、
・test.rb
・test.json
の2つのコードしかいれずにgit push heroku masterしたらpushできなかった。

いろんなサイトにこういう時はindex.phpのファイルをおけばいいと書いてあるが、
私が書いているのはphpじゃなくてrubyである。
index.phpをいれるとphpのコードとして認識されてしまう。

わからなすぎてHerokuの知り合いに質問してみると、
GemfileをいれるとRubyのコードとして認識されるらしい。

ほほー。

でもGemfileになに書いていれとくんだ?
まあとりあえずGemfileにはつかったgemをかいておいた。
それでbundle installしておいた。
やり方あってるのか心配だー

で、この段階でのfile構成

・test.rb
・test.json
・Gemfile
・Gemfile.lock(Gemfileをつくってbundle installしたら自動でできる)

これでもたしかダメだよってherokuさんに怒られた。
どうやらProcfileというものをつくらなきゃいけないらしい。

英語の資料あったぜ!
https://devcenter.heroku.com/articles/procfile

Procfileに関しては日本語資料がまだまだ少なくて、あんまり書き方わからない…

clockworkを使って、定期的に動くコードを書いていたので、
Procfileには
clock: bundle exec clockwork test.rb
と書いておいた。

clockwork参考資料:
Herokuでcron?もう古いかも、それ

ここのサイトすごく参考にさせてもらった。
それにしてもclockwork便利すぎてやばい。
1秒ごとにコードを動かしたりできる。なんかcron以上にすごい。

で、この段階のファイル構成。

・test.rb
・test.json
・Gemfile
・Gemfile.lock
・Procfile

これで、git push heroku masterは通るようにはなったんだけど、
heroku logs --tailでログをみているとエラーがでている模様。
これはアバウトに言うとwebアプリじゃないのにwebアプリの経路を断ち切っていなかったのが原因みたいで、

$ heroku ps:scale clock=1
とコマンドうったら治った。

なぜclock=1と書いているかというと、Procfileにclock: bundle exec clockwork test.rbと書いて、アプリ名をclockにすると指定したから。
1というのは1dynoをこのアプリにわりあてますよって意味らしい。
Webアプリは自動で1dyno確保しているけど、webアプリじゃないと自分でやらなきゃいけないらしいのです。
dynoって何?とりあえずよくわからないけどdynoってやつがわりあてられると動くらしい。

とりあえずこれで動くようになった!!わーい!!


で、この段階のファイル構成。

・test.rb
・test.json
・Gemfile
・Gemfile.lock
・Procfile
・index.html.erb

あ、なぜindex.html.erbが増えてるかというとね!
先輩にherokuでコードを共有しつつ作業をしていたら、
いつのまにかindex.html.erbを足してくれていた。

理由は正直よくわからないけど、まあ動いたからいっか。
index.phpを加えるのと同じノリなのかしらね。
(適当でごめんなさい)

以上、Herokuに関する適当なメモでした。

2012年4月20日金曜日

herokuで複数アカウントを管理する

----

追記:
複数アカウントを導入すると、どうしてもエラーまみれになってしまってうまくいかなかったので、複数アカウントにするのを諦めました。
しかし、もし複数アカウントでやるならどうやらaccountのプラグインを使うのが一番良いみたいです。

・heroku-accountsプラグイン
http://journal.sooey.com/162
・わたしはheroku-accounts導入しようとしたらいろいろこけまくって諦めてしまった。ねばって成功した人もたくさんいるみたいなので、とりあえず上のサイトを参考にしながら試してみるとよいかもしれない。

----

ayuminさんのところに詳しくは書かれていた。
http://d.hatena.ne.jp/ayumuaizawa/20120120

けれど、一応自分でもメモメモ。


$ heroku login
Enter your Heroku credentials.
Email: (herokuに新しく登録したアドレスを記入)
Password: (herokuのパスを入れる)

そしたらどっちのssh使うの?ってでてきた。

Found the following SSH public keys:
1) github_rsa.pub
2) id_rsa.pub
Which would you like to use with your Heroku account? 

ふええ〜 どっちだっけ〜 忘れちゃったよ〜

考えてみるに、多分(1)がgithubに登録したやつで、(2)が前にherokuに登録したとき発行したやつかなあ、多分。多分。

というわけで再びssh発行。


$ ssh-keygen(ようっし!発行!)
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/ikezawaayaka/.ssh/id_rsa): /Users/ikezawaayaka/.ssh/td_rsa(td_rsaとどのアカウントで使っているのかわかりやすい名前にしてみたキリッ)
Enter passphrase (empty for no passphrase): (普通にエンターでok)
Enter same passphrase again: (普通にエンターでok)
Your identification has been saved in /Users/ikezawaayaka/.ssh/td_rsa.
Your public key has been saved in /Users/ikezawaayaka/.ssh/td_rsa.pub.
The key fingerprint is:
28:bc:c4:06:a2:93:e3:92:06:cd:42:84:c9:36:5d:7c ikezawaayaka@ikezawa-ayanobana-no-MacBook-Pro-2.local
The key's randomart image is:
+--[ RSA 2048]----+
|oo. o.           |
|++ . . E         |
|o.o   .          |
|o= +   .         |
|B o * . S        |
|o= o o           |
|oo  .            |
|o                |
|                 |
+-----------------+

これでsshが3つになりまして、


$ heroku login
Enter your Heroku credentials.
Email: (メアド入力)
Password: (パスワード入力)
Found the following SSH public keys:
1) github_rsa.pub
2) id_rsa.pub
3) td_rsa.pub
Which would you like to use with your Heroku account? 3(3番目のつかうぜ!)
Uploading ssh public key /Users/ikezawaayaka/.ssh/td_rsa.pub


無事herokuに複数アカウントでログインできたわけであります。




2012年4月17日火曜日

Ruby on Railsでのアプリ開発の基本

今回は簡単なRailsアプリの開発をMac OS X でやっていきます。

・Ruby on Rails とは
Ruby on Rails(ルビーオンレイルズ)はオープンソースのWebアプリケーションフレームワークである。RoRまたは単にRailsと呼ばれる。その名にも示されているようにRubyで書かれている。またModel View Controller(MVC)アーキテクチャに基づいて構築されている。(Wikipediaより)

・開発環境を整える
MacにはRubyがデフォルトではいっています。
Rubyのバージョンを確認してみます。
ターミナルを開いて、以下のコマンドで確認します。
$ ruby -v
ruby 1.9.3p0 (2011-10-30 revision 33570) [x86_64-darwin10.8.0]
続いて、Railsのバージョンも確認してみましょう。
$ Rails -v
Rails 3.2.1

Rubyのバージョンは1.9以上が望ましいので、1.9以下の方はアップデートを推奨します。
Railsはデフォルトでは入っていないので、インストールしましょう。

Railsのインストールは、
Macportをインストール後、
$ sudo port install rb-rubygem
$ sudo gem install rails
とコマンドをうち、Railsを導入します。

余談ですが、RVMとgemsetを利用して、RubyとRailsのバージョン管理をするととても便利です。

・簡単なアプリを作る
はじめてのアプリの定番はやはりToDoリストです。
本当にあっという間にできて感動します。

$ cd
$ rails new todo
$ cd todo

cdコマンドで、一番下の階層に移動し、rails new で新しいアプリを作成します。
今回はToDoリストをつくるので、アプリ名は「todo」とします。
そして再度cdコマンドで今度は新しくできたtodoのファイルへ移動します。

$ rails g scaffold note body:text title:string
$ rake db:migrate
rails g scaffold note body:text title:stringで、本文とタイトルが入れられるToDoリストを作ります。noteは適当につけた今つくった機能の名前です。アプリ名とかぶらないように気をつけます。
次に、rake db:migrateでtodo情報を登録するためのデータベースをつくります。
またまた余談ですが、firefoxのアドオンでSQLite Manegerというものがあるのですが、
このアドオンを入れるとデータベースを可視化することができます。

早速ブラウザで確認してみましょう。
ローカルでサーバーを立てて、確認。
$ rails s
ブラウザで「http://localhost:3000/notes」を開いてチェックしてみましょう。

ちゃんとこうなっていれば成功。



New Noteからいろいろと追加してみましょう!


以上で簡単にToDoアプリができました。

  • herokuで作った簡単にアプリを公開することができます。
  • twitter bootstrapを使うと見た目を簡単にtwitter風にすることができます。