americandog1993の日記

プログラマー歴半年のメモ

Cloud9でrails serverできない

こんなん出た。

$ rails s -b $IP -p $PORT
=> Booting Puma
=> Rails 5.0.0.1 application starting in development on http://0.0.0.0:8080
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.4.0 (ruby 2.3.0-p0), codename: Owl Bowl Brawl
* Min threads: 0, max threads: 16
* Environment: development
* Listening on tcp://0.0.0.0:8080
Exiting
/usr/local/rvm/gems/ruby-2.3.0/gems/puma-3.4.0/lib/puma/binder.rb:255:in `initialize': Address already in use - bind(2) for "0.0.0.0" 

再起動したら直った。

SAMインターフェースのメソッドは一つだけ

SAMインターフェースは一個のメソッドしか定義できない。

interface MyFunction {
  int call(int x);
}

インターフェース型変数にメソッド参照を入れるの慣れない。
直感的に捉えられる日は来るのだろうか。

参考:
【Java】Java8のあれこれ③ 関数型インターフェース(1) | Ardito Tech Blog

Ruby ハッシュのデフォルト値

ハッシュの存在しないキーのデフォルト値について。

exampleA = {}
p exampleA[:foo] # -> nil

exampleB = Array.new
p exampleB[:foo] # -> nil

exampleC = Array.new(0)
p exampleC[:foo] # -> 0

newした時の引数にデフォルト値を設定できる。
何もしなければnil
普通にexample = {}で宣言した時にデフォルト値を渡す方法はあるんだろうか・・・

参考:
Ruby on Rails チュートリアル:実例を使って Rails を学ぼう

HerokuでBuild FailedしたらGemfileを見る

ドットインストールRails入門のTaskAppができた。
ためしにHerokuにあげてみようと

$ git push heroku master

したらBuild Failedしたのでメモ。

少し前なら折れていたが・・・多少メンタルが強くなったのか、エラーメッセージを漁ってみた。

remote:        checking for sqlite3.h... no
remote:        sqlite3.h is missing. Try 'brew install sqlite3',

HerokuはPostgreSQLをサポートしている。
僕があげようとしていたGemfileはsqliteを入れることになっていたのでこんなエラーが出たんだろう。
sqliteをpgに入れ替えて再度pushしたら無事デプロイできましたとさ。

作ったTaskApp
https://ancient-sea-24379.herokuapp.com/


追記:
migrate忘れてた。

$ heroku run rake db:migrate

参考:

http://tech.gmo-media.jp/post/42344727734/starting-rails-on-heroku-01
tech.gmo-media.jp

Rails超初心者のいろいろ

Railsチュートリアル7〜8章くらいで完全についていけなくなってしまったので、中断した。
諦めてはいない。戦略的撤退。

特にActiveRecordの不理解が全体の俯瞰を妨げている感があったのでドットインストールActiveRecord入門をざっと視聴。
だいぶマシになった気がする。
ActiveRecordとは要はSQLを使わずにRuby文法でDBを操作することを可能にする便利ツール的なもののようだ。

Bootstrap入門も半分くらい視聴。
とりあえずこれは暗記したらいけるっぽい。
気に入らない部分をちょこちょこCSSで編集すればいい感じだろう。

進むことを優先しすぎた感がある。
一度振り返る必要がある。
特に基本的と思われる部分を自分なりにまとめてみる。

よく使うRailsコマンド

$ rails new 名前

超基本。アプリの骨格をザッと作る。

$ rails generate model 名前 table列名:データ型

modelはDBをごにょごにょする何か。
単数形でgenerateする。
列名は複数書いていける。
自動的に一意のid列も生成される。

$ rails generate controller 名前

controllerはviewをわちゃわちゃする何か。
複数形でgenerateする。
名前は複数書いていける。
modelもcontrollerも頭を大文字にしてgenerateする。

$ rake db:migrate

今これを書いててはたと手が止まった。マイグレーションについて何も理解していなかったことに気づいた。
何をしているのか。ググっても釈然としない。要はDBを作るコマンド・・・?
modelの段階で列名は書いてるし、そこでDBできてるんじゃないのか?と思っていたが、どうも違うっぽい。
ここは本当に自信がないのだけれども、ググって出てきたサイト(本記事末尾に掲載)をサーッと眺めた限りでは、generate modelの段階では、マイグレーションファイルというDBのレシピ的なものが作られるだけで、rake db:migrateすることによってレシピに基づいたDBの実態が生成されるようだ。
もし違ったらご指摘ください。

$ rails console

Rubyを書いて簡易テストができる。
実験場に入る的な感じ。

$ rake routes

link_toの後になんて書いたらいいんだっけというときに叩く。

よく触るファイル

controllers/concerns/xxxx_controller.rb

def xxxx
end

xxxxはビュー名と合わせる。

views/layouts/application.html.erb

ビューファイルの共通部を書く。
ここに書くと他にも反映される。
DRY精神の片鱗を見ることができるすごいやつ。

views/xxxx/xxxx.html.erb

共通部以外を記述していく。
generate controllerの際にコントローラと一緒に作ることもできる。

config/routes.rb

root 'コントローラ名(xxxx_controller.rbのxxxx部)#ビュー名(xxxx.html.erbのxxxx部)'
get 'コントローラ名#ビュー名'
resouces :モデル名

最低限この辺抑えとけばなんとかなりそう。なってくれ。

参考:
www.transnet.ne.jp
ドットインストール Rails入門
http://dotinstall.com/lessons/basic_rails_v2/24912