行きたいなーって思っていたんだけどなかなか行けず、なんと今年に入って初めての山登りというか低山ハイキング。
これじゃあ趣味って言わないな、ま、いっか。
桑谷山は岡崎市になる436mの低山。
コースが紹介されていた本では、難易度も初心者向けで3時間ほどで登れるってことだったんで、久しぶりの山登りにはもってこいかなと思って、この山をチョイス。
本当は公共交通機関で行きたかったんだけど、1日に4本ぐらいしかバスが来ない場所だったので、泣く泣く車で。
遠いよ、岡崎。

こんな感じで始まるんだけど、石段があったりしてちょっと熊野古道っぽくない?

12時過ぎから登り始めて、1時間半ぐらいかけてまずは展望台まで到着。
この景色は圧巻だった。
目の前に見えるのは三河湾らしい。
ここで休憩する人が何人かいたんだけど、僕も持ってきた菓子パンを頬張った。
うまし。
ここに辿りつくまでに、ベンチに座って休憩を3回ぐらいするという体たらく。
心肺機能がダメダメだわ、俺。
ちょっと鍛えない・・・。

んで、頂上はこれだけ。
登ったなー感があるのは、さっきの展望台だった・・・みたいな話は結構よくある。
低山だと特に。

帰り道の谷。
はっきり言って、分かりやすい道しるべなんかもないし、なんとなく歩きやすいところを歩くという感じ。
山の中に独りっきりなので、ちょっとあっているのか不安になった。
が、意外となんとかなるもんなんだよね。
この辺の人間の感覚ってすごいよなあ、野性的というか。
日常生活では使わない能力だ。

終盤に訪れた池。
凄く綺麗だった。
こういう景色の変化があると楽しめる。
久しぶりの山だったけど、なんとか無事登頂出来た。
やっぱ山歩いていると賢者になれるなと再認識。
しんどい思いすると、人間素直になるのかなあ。
やっぱ山は三河地方が多いなあ。
また行きたい、今度は間を開けずに。
体力付けなくちゃ。
これじゃあ趣味って言わないな、ま、いっか。
桑谷山は岡崎市になる436mの低山。
コースが紹介されていた本では、難易度も初心者向けで3時間ほどで登れるってことだったんで、久しぶりの山登りにはもってこいかなと思って、この山をチョイス。
本当は公共交通機関で行きたかったんだけど、1日に4本ぐらいしかバスが来ない場所だったので、泣く泣く車で。
遠いよ、岡崎。
こんな感じで始まるんだけど、石段があったりしてちょっと熊野古道っぽくない?
12時過ぎから登り始めて、1時間半ぐらいかけてまずは展望台まで到着。
この景色は圧巻だった。
目の前に見えるのは三河湾らしい。
ここで休憩する人が何人かいたんだけど、僕も持ってきた菓子パンを頬張った。
うまし。
ここに辿りつくまでに、ベンチに座って休憩を3回ぐらいするという体たらく。
心肺機能がダメダメだわ、俺。
ちょっと鍛えない・・・。
んで、頂上はこれだけ。
登ったなー感があるのは、さっきの展望台だった・・・みたいな話は結構よくある。
低山だと特に。
帰り道の谷。
はっきり言って、分かりやすい道しるべなんかもないし、なんとなく歩きやすいところを歩くという感じ。
山の中に独りっきりなので、ちょっとあっているのか不安になった。
が、意外となんとかなるもんなんだよね。
この辺の人間の感覚ってすごいよなあ、野性的というか。
日常生活では使わない能力だ。
終盤に訪れた池。
凄く綺麗だった。
こういう景色の変化があると楽しめる。
久しぶりの山だったけど、なんとか無事登頂出来た。
やっぱ山歩いていると賢者になれるなと再認識。
しんどい思いすると、人間素直になるのかなあ。
やっぱ山は三河地方が多いなあ。
また行きたい、今度は間を開けずに。
体力付けなくちゃ。
前回の記事はこちら
ブログHeroku移転計画 その2 - 「Getting Started with Rails」をやってみた(2)
結構間が空いてしまったので、忘れてるなあ・・・。
けど、とりあえず終わらせるぞ。
■10.セキュリティ
次はセキュリティって書いてあったけど、Basic認証のかけ方。
すげー簡単。
privateってのはメソッドの呼び出せるスコープかな。
なんか本で読んだ気がするぞ。
before_filterはフックを設定するためのメソッドだろうな。
最初がメソッド名で、次が引数って感じかな?
これはコントローラー部分のヘルプを見ればわかりそうだ。
この辺もCakePHPと似ている。
っつうことで、結構簡単に実装できた。
usersコントローラ作って・・・って奴もどこかでみとないとな。
まあ、個人利用のブログにいらんけど。
■11.マルチモデルフォームの作成
次はマルチモデルフォーム?
タグ機能を追加する方法っぽいな、助かるぜ。
書かれているままデータベースの作成など。
これが全くわからないので、調べてみた。
これはモデルが親子関係の時とか、子どもも一緒に更新するか?そん時は削除も許可するか、どんな時は拒否するか?みたいな設定ができるっぽい。
んで、Viewも変更しろだと。
まずはフォーム部分。
んで呼び出しているパーツを生成。
意味はなんとなくわかるんだけどねえ。
どの変数にどんなオブジェクトが入っているかってのが、もはや追えないな。
tagsってフィールドの中にlabelとかtext_fieldとかがあるってのがまだよくわかってないな。
ま、そりゃいきなりわかったら怖いけど。
showのテンプレートにも追加
なんかmapしてjoinしているのが美しくないらしいので、ヘルパーの登場っぽい。
■12.ヘルパー
んで、とりあえず終了。
■全体的な感想
CakePHP様様って感じで、確かによく似ていると思う。
あとは細かい、裏側で何が行われているのかをちょっと把握しながらやらないと、こんがらがっちゃうなあとは思った。
あとは公式サイトの使い方覚えないと(まず英語を怖がらないようにしないと)
ブログHeroku移転計画 その2 - 「Getting Started with Rails」をやってみた(2)
結構間が空いてしまったので、忘れてるなあ・・・。
けど、とりあえず終わらせるぞ。
■10.セキュリティ
次はセキュリティって書いてあったけど、Basic認証のかけ方。
すげー簡単。
@/app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
protect_from_forgery
private
def authenticate
authenticate_or_request_with_http_basic do |user_name, password|
user_name == 'admin' && password == 'password'
end
end
endauthenticateってアクションを追加。privateってのはメソッドの呼び出せるスコープかな。
なんか本で読んだ気がするぞ。
@/app/controllers/posts_controller.rb
+ before_filter :authenticate, :except => [:index, :show]Postsコントローラーは参照系以外は全部認証が必要に。@/app/controllers/comments_controller.rb
+ before_filter :authenticate, :only => :destroyCommentsコントローラーは削除だけ認証をかける。before_filterはフックを設定するためのメソッドだろうな。
最初がメソッド名で、次が引数って感じかな?
これはコントローラー部分のヘルプを見ればわかりそうだ。
この辺もCakePHPと似ている。
っつうことで、結構簡単に実装できた。
usersコントローラ作って・・・って奴もどこかでみとないとな。
まあ、個人利用のブログにいらんけど。
■11.マルチモデルフォームの作成
次はマルチモデルフォーム?
タグ機能を追加する方法っぽいな、助かるぜ。
書かれているままデータベースの作成など。
$ rails generate model tag name:string post:references
$ rake db:migrate@/app/controllers/posts_controller.rb
+ has_many :tags
+ accepts_nested_attributes_for :tags, :allow_destroy => :true,
+ :reject_if => proc { |attrs| attrs.all? { |k, v| v.blank? } }Postsコントローラを編集。これが全くわからないので、調べてみた。
これはモデルが親子関係の時とか、子どもも一緒に更新するか?そん時は削除も許可するか、どんな時は拒否するか?みたいな設定ができるっぽい。
んで、Viewも変更しろだと。
まずはフォーム部分。
@ /app/views/posts/_form.html.erb
<div class="field">
<%= post_form.label :content %><br />
<%= post_form.text_area :content %>
</div>
+ <h2>Tags</h2>
+ <%= render :partial => 'tags/form',
+ :locals => {:form => post_form} %>
<div class="actions">
<%= post_form.submit %>
</div>これは単純にタグを入力する部分の追加って事なんだろうな。んで呼び出しているパーツを生成。
@ /app/views/tags/_form.html.erb
<%= form.fields_for :tags do |tag_form| %>
<div class="field">
<%= tag_form.label :name, 'Tag:' %>
<%= tag_form.text_field :name %>
</div>
<% unless tag_form.object.nil? || tag_form.object.new_record? %>
<div class="field">
<%= tag_form.label :_destroy, 'Remove:' %>
<%= tag_form.check_box :_destroy %>
</div>
<% end %>
<% end もはや何が何だか。意味はなんとなくわかるんだけどねえ。
どの変数にどんなオブジェクトが入っているかってのが、もはや追えないな。
tagsってフィールドの中にlabelとかtext_fieldとかがあるってのがまだよくわかってないな。
ま、そりゃいきなりわかったら怖いけど。
showのテンプレートにも追加
<p class="notice"><%= notice %></p>
<p>
<b>Content:</b>
<%= @post.content %>
</p>
+ <p>
+ <b>Tags:</b>
+ <%= @post.tags.map { |t| t.name }.join(", ") %>
+ </p>
<h2>Comments</h2>
<%= render :partial => "comments/comment",
:collection => @post.comments %>joinして表示しているなあ。なんかmapしてjoinしているのが美しくないらしいので、ヘルパーの登場っぽい。
■12.ヘルパー
@ /app/helpers/posts_helper.rb
module PostsHelper
+ def join_tags(post)
+ post.tags.map { |t| t.name }.join(", ")
+ end
endヘルパーはモジュールでつくるんだなー。@ /app/view/posts_helper.rb
<p>
<b>Tags:</b>
- <%= @post.tags.map { |t| t.name }.join(", ") %>
+ <%= join_tags(@post) %>
</p>ヘルパーを呼び出した意識はないんだけど、スコープはどうなっているんだ?んで、とりあえず終了。
■全体的な感想
CakePHP様様って感じで、確かによく似ていると思う。
あとは細かい、裏側で何が行われているのかをちょっと把握しながらやらないと、こんがらがっちゃうなあとは思った。
あとは公式サイトの使い方覚えないと(まず英語を怖がらないようにしないと)
前回の記事はこちら
ブログHeroku移転計画 その1 - 「Getting Started with Rails」をやってみた(1)
「Getting Started with Rails」の「5 Getting Up and Running Quickly with Scaffolding」から再開。
■5~6.scaffoldを作ったり、リソースを作ったり。
次はscaffoldか。
さて、本家はどこまで作ってくれるんだろう。
凄いな、コントローラ、モデル、ビュー、テストまで一式だ。
次にデータベースの更新。
CakePHPはこの辺弱かったし、似たようなことは出来るんだけど、そこまでみんな使ってない気がするな。
けどまあ、奥が深そうだ。
次、モデルのバリデーションか。
presenceは未入力かどうかのチェックらしい。
なんかコンソールを使うとか書かれているので、そのまま入力。
コンソール上でRails上のクラスとかメソッドが呼べるのかあ。
なんかいろいろ使えそうなんだけど、いまいち使い方が思いつかない・・・。
お、次はいよいよデータベースの内容を表示する一連の流れかな。
コントローラの中身を確認してみると、いろいろ出来てる。
んで、Viewもおんなじ様にいろいろ出来ている。
んで、レイアウトを変更するとな?
ブラウザで確認すると、確かに変わっている。
Railsだとデフォルトのレイアウトはapplication.html.erbって名前なのか。
んで、
記事の投稿、編集、削除、参照という一連のCRUDの流れの説明。
Viewファイル的には殆ど変わらない投稿と編集ページが、どうやってFormのアクション先を振り分けているかは良くわからなかった。
けど、Railsがうまく隠蔽してくれているといえばそうなのか。
これはちょっとでもルールから外れるとすげー面倒くさそうかも。
んで、ざーっと読み飛ばしてw「7 Adding a Second Model」へ
コメントのモデルを作るってことね。
■7.2個目のモデルを作る
そういえばテーブルも作りもCakePHPとほぼ一緒だな。
postsモデルにも関連付けを追加。
has_manyだと。
次にroutes.rbに以下の項目を追加するらしいんだけど、これが全くさっぱりわからん。
後から分かってくるかな?
コメントコントローラの生成ね。
んでポストのshowビューに以下の様に変更。
コメントを投稿できるようにするっぽい。
んで、コメントコントローラーにもメソッド追加
実際にフォームから送信しようとすると
この辺はちょっとどこかで解説みないとわかんないな。
んで、再度showビューを編集して、コメントの一覧が見えるようにする。
先ほどroutes.rbに追加したのは、どうやら
あとフォーム周りはようわからんな。
これ実際に自分でつくろうとすると、必ず躓くな。
が、ひとまず前に進もう。
■8.リファクタリング
次はリファクタリング。
まさかのリファクタリング指南コーナーか。
まずはパーツ作り。
次に読み込む先をごにょる。
やっていることは大体わかる。
ただ、collectionって指定すると、中でループを展開してくれるっぽい。
あとは、form_forメソッドで、指定しているのは、関連付けされているモデルの場合の指定方法みたいだ。
buildってメソッドもその一環らしい。
それぞれモデルクラス、formヘルパークラスの説明部分にそれっぽいことが書いてあった。
けど、英語か・・・。
細かい部分は自信ないな。
けど、この辺のヘルパーやモデルの関係もCakePHPと似ている。
より強力な感じだけども。
■9.コメントの削除
次は削除処理か。
もはや何ヘルパーに属しているかさえも分からんくなっているな。
comment.postでそれぞれ:comment.post_idや:idをどうやら指定しているのかな?
んー。
ちと分かりづらいな。
次のコントローラ部分へのメソッドの追加をみるとそんな感じなんだけど。
んで、記事が消されたらコメントも消そうというのが以下の設定。
ふむふむ。
長くなったので今回もここまで。
続きます。
ブログHeroku移転計画 その3 - 「Getting Started with Rails」をやってみた(3)
ブログHeroku移転計画 その1 - 「Getting Started with Rails」をやってみた(1)
「Getting Started with Rails」の「5 Getting Up and Running Quickly with Scaffolding」から再開。
■5~6.scaffoldを作ったり、リソースを作ったり。
次はscaffoldか。
さて、本家はどこまで作ってくれるんだろう。
rails generate scaffold Post name:string title:string content:text
invoke active_record
create db/migrate/20110424014627_create_posts.rb
create app/models/post.rb
invoke test_unit
create test/unit/post_test.rb
create test/fixtures/posts.yml
route resources :posts
invoke scaffold_controller
create app/controllers/posts_controller.rb
invoke erb
create app/views/posts
create app/views/posts/index.html.erb
create app/views/posts/edit.html.erb
create app/views/posts/show.html.erb
create app/views/posts/new.html.erb
create app/views/posts/_form.html.erb
invoke test_unit
create test/functional/posts_controller_test.rb
invoke helper
create app/helpers/posts_helper.rb
invoke test_unit
create test/unit/helpers/posts_helper_test.rb
invoke stylesheets
create public/stylesheets/scaffold.cssお、全部出来てるわw凄いな、コントローラ、モデル、ビュー、テストまで一式だ。
次にデータベースの更新。
rake db:migratemigrationってのがよくわかんないんだけど、すげ=便利そう。CakePHPはこの辺弱かったし、似たようなことは出来るんだけど、そこまでみんな使ってない気がするな。
けどまあ、奥が深そうだ。
次、モデルのバリデーションか。
class Post < ActiveRecord::Base
validates :name, :presence => true
validates :title, :presence => true, :length => { :minimum => 5 }
end見た目で大体何やっているのかわかるのがすごいな。presenceは未入力かどうかのチェックらしい。
なんかコンソールを使うとか書かれているので、そのまま入力。
$ rails consoleんで、言われるがままに入力すると、同じ内容が帰ってきた。>> p = Post.new(:content => "A new post")
=> #<Post id: nil, name: nil, title: nil,
content: "A new post", created_at: nil,
updated_at: nil>
>> p.save
=> false
>> p.errors
=> #<OrderedHash { :title=>["can't be blank",
"is too short (minimum is 5 characters)"],
:name=>["can't be blank"] }>これすげー!コンソール上でRails上のクラスとかメソッドが呼べるのかあ。
なんかいろいろ使えそうなんだけど、いまいち使い方が思いつかない・・・。
お、次はいよいよデータベースの内容を表示する一連の流れかな。
コントローラの中身を確認してみると、いろいろ出来てる。
んで、Viewもおんなじ様にいろいろ出来ている。
んで、レイアウトを変更するとな?
@/app/views/layouts/application.html.erb
- <body>
+ <body style="background: #EEEEEE;">色つけただけ。ブラウザで確認すると、確かに変わっている。
Railsだとデフォルトのレイアウトはapplication.html.erbって名前なのか。
んで、
記事の投稿、編集、削除、参照という一連のCRUDの流れの説明。
Viewファイル的には殆ど変わらない投稿と編集ページが、どうやってFormのアクション先を振り分けているかは良くわからなかった。
けど、Railsがうまく隠蔽してくれているといえばそうなのか。
これはちょっとでもルールから外れるとすげー面倒くさそうかも。
んで、ざーっと読み飛ばしてw「7 Adding a Second Model」へ
コメントのモデルを作るってことね。
■7.2個目のモデルを作る
$ rails generate model Comment commenter:string body:text post:references
$ rake db:migratepost:referenceって書くだけで参照してくれるのか。そういえばテーブルも作りもCakePHPとほぼ一緒だな。
postsモデルにも関連付けを追加。
has_manyだと。
@/app/models/post.rb
class Post < ActiveRecord::Base
validates :name, :presence => true
validates :title, :presence => true, :length => { :minimum => 5 }
+ has_many :comments
end次にroutes.rbに以下の項目を追加するらしいんだけど、これが全くさっぱりわからん。
後から分かってくるかな?
@/configroutes.rb
- resources :posts
+ resources :posts do
+ resources :comments
+ end迷わず行けよ、行けばわかるさ。コメントコントローラの生成ね。
$ rails generate controller Commentsんでポストのshowビューに以下の様に変更。
コメントを投稿できるようにするっぽい。
@/app/views/posts/show.html.erb
<p class="notice"><%= notice %></p>
<p>
<b>Name:</b>
<%= @post.name %>
</p>
<p>
<b>Title:</b>
<%= @post.title %>
</p>
<p>
<b>Content:</b>
<%= @post.content %>
</p>
<h2>Add a comment:</h2>
<%= form_for([@post, @post.comments.build]) do |f| %>
<div class="field">
<%= f.label :commenter %><br />
<%= f.text_field :commenter %>
</div>
<div class="field">
<%= f.label :body %><br />
<%= f.text_area :body %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
<%= link_to 'Edit Post', edit_post_path(@post) %> |
<%= link_to 'Back to Posts', posts_path %> |この中で<%= form_for([@post, @post.comments.build]) do |f| %>がよくわかんないけど、これでよろしくやってくれているんだろう。んで、コメントコントローラーにもメソッド追加
def create
@post = Post.find(params[:post_id])
@comment = @post.comments.create(params[:comment])
redirect_to post_path(@post)
endcreateメソッドがpostコントローラから始まっているところがみそっぽいな。実際にフォームから送信しようとすると
/posts/2/commentsみたいなURLになっているので、大したものだなあ。この辺はちょっとどこかで解説みないとわかんないな。
んで、再度showビューを編集して、コメントの一覧が見えるようにする。
+ <h2>Comments</h2>
+ <% @post.comments.each do |comment| %>
+ <p>
+ <b>Commenter:</b>
+ <%= comment.commenter %>
+ </p>
+
+ <p>
+ <b>Comment:</b>
+ <%= comment.body %>
+ </p>
+ <% end %>なんだかよくわからないことが増えてきた。先ほどroutes.rbに追加したのは、どうやら
/posts/1/comments/1みたいなルーティングを実現したい時に使うっぽい。あとフォーム周りはようわからんな。
これ実際に自分でつくろうとすると、必ず躓くな。
が、ひとまず前に進もう。
■8.リファクタリング
次はリファクタリング。
まさかのリファクタリング指南コーナーか。
まずはパーツ作り。
@/app/views/comments/_comment
<p>
<b>Commenter:</b>
<%= comment.commenter %>
</p>
<p>
<b>Comment:</b>
<%= comment.body %>
</p@/app/views/comments/_form.html.erb
<%= form_for([@post, @post.comments.build]) do |f| %>
<div class="field">
<%= f.label :commenter %><br />
<%= f.text_field :commenter %>
</div>
<div class="field">
<%= f.label :body %><br />
<%= f.text_area :body %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end 次に読み込む先をごにょる。
@/app/views/posts/show.html.erb
<p class="notice"><%= notice %></p>
<p>
<b>Name:</b>
<%= @post.name %>
</p>
<p>
<b>Title:</b>
<%= @post.title %>
</p>
<p>
<b>Content:</b>
<%= @post.content %>
</p>
<h2>Comments</h2>
<%= render :partial => "comments/comment",
:collection => @post.comments %>
<h2>Add a comment:</h2>
<%= render "comments/form" %>
<br />
<%= link_to 'Edit Post', edit_post_path(@post) %> |
<%= link_to 'Back to Posts', posts_path %> ポイントは<%= render :partial => "comments/comment",
:collection => @post.comments %>
<%= render "comments/form" %>の2箇所。やっていることは大体わかる。
ただ、collectionって指定すると、中でループを展開してくれるっぽい。
あとは、form_forメソッドで、指定しているのは、関連付けされているモデルの場合の指定方法みたいだ。
buildってメソッドもその一環らしい。
それぞれモデルクラス、formヘルパークラスの説明部分にそれっぽいことが書いてあった。
けど、英語か・・・。
細かい部分は自信ないな。
けど、この辺のヘルパーやモデルの関係もCakePHPと似ている。
より強力な感じだけども。
■9.コメントの削除
次は削除処理か。
@/app/views/comments/_comment.html.erb
+ <p>
+ <%= link_to 'Destroy Comment', [comment.post, comment],
+ :confirm => 'Are you sure?',
+ :method => :delete %>
+ </plink_toはURLヘルパーかな?もはや何ヘルパーに属しているかさえも分からんくなっているな。
comment.postでそれぞれ:comment.post_idや:idをどうやら指定しているのかな?
んー。
ちと分かりづらいな。
次のコントローラ部分へのメソッドの追加をみるとそんな感じなんだけど。
@/app/controllers/comments_controller.rb
+ def destroy
+ @post = Post.find(params[:post_id])
+ @comment = @post.comments.find(params[:id])
+ @comment.destroy
+ redirect_to post_path(@post)
+ endんで、記事が消されたらコメントも消そうというのが以下の設定。
ふむふむ。
@/app/models/post.rb
class Post < ActiveRecord::Base
validates :name, :presence => true
validates :title, :presence => true, :length => { :minimum => 5 }
+ has_many :comments, :dependent => :destroy
enddependentってのは分かりやすいわ。長くなったので今回もここまで。
続きます。
ブログHeroku移転計画 その3 - 「Getting Started with Rails」をやってみた(3)
このブログは現在、以下のような環境で動いている。
■現在
けど、主に経済的な理由から以下のような環境に移行したい。
■目標
単にサーバ代をけちりたいだけです。
めざせ!無料でブログサイト!
ということで無料のPaaSを探していたら、Google App Engineの他にHerokuに無料プランの存在を確認。
無料プランだとデータベースが5MBしか使えないらしいんだけど、今の僕のサイトが2MBも無いので、当分いいだろうと。
最近ブログも書く回数減っているしねえ。
ということで、作業を当たるに当たって備忘録を書いておこうと思う。
ここいらで自分の前提条件を書いておく。
■自分のスキル
まあ、いろいろ壁がありそうだけど、なんとかなるっしょ。
ということで初めてみる。
■はじめてRailsに触る
つうことで、HerokuでRailsが動くらしいので、まずはRailsに慣れようと思う。
Sinatraの方がさくっと出来そうだけど、いい加減
「ん?なに?フレームワーク?Railsでいいんじゃない?やっぱアレだし」
って言いたいんです、すんません。
んで、Railsのチュートリアルやろうと思ったら日本語サイトがないじゃないかー。
Getting Started with Rails
こんな有名なアプリなのに無いってところがRubyの文化なのかしら。
ま、英語は読めませんがコードは読めるのでなんとかなるだろってことで前向きに進んでみる。
とりあえずrvmでさくっと環境を作る。
rvmについてはいろんなところで説明されているので、今回はパス。
あ、でも後日それはそれでまとめておこう。
■3 新しくRailsプロジェクトを作る
で、railsインストール。
なんかデプロイする時にデータベース変更できるみたいなんだけど
(そこがすげーよ、びっくりだよ)
どれがPostgres用のアダプタとして最適なのかがわからないので、ようわからんかった。
けど、pgで良いらしい、多分。
んで、アプリを作る。
で、何が必要かは
次にデータベースの設定だ。
ここで試しにPostgresを指定してみる。
続けてデータベースの作成。
pgパッケージがないぞ糞野郎!とか言われる。
んでいろいろ調べたらインストールしただけでは読み込まれないらしい。
で、どうするかというと以下のようにしたらOKだった。
なるほど。
これみてbundkeコマンドも動いているんじゃないかな?
依存パッケージが一箇所に集まっているのはいいね。
んで、再度db:createでデータベースがちゃんと出来ているのを確認。
どこかでRailsは環境ごとにデータベースを作成するって言ってたけど、
■4 こんにちわ、Rails
さて、いよいよHello,Railsだ。
PHPではフレームワークにWEBサーバまでくっついて来るってのは見たことがないんだけど、Rubyはそういうのばかりなんだよね。
Sinatraの時もそうだったし。
最初は
「なんだよ、めんどくせー」
って思っていたけども、わざわざWEBサーバの設定を気にせずにどこのディレクトリでも開発できるってのは確かにお手軽だわ。
んで、フレームワークに付属しているWebサーバで動かそうとすると大体
ま、指定できるオプションあるだろうと調べたらやっぱりあった。
さすがだわー。
IPで指定するみたい。
うむ、良いではないか。
が、すげー重いのな。
検索したらMongrelを使えばいいんじゃね?ってことなんで、言われた通りやってみる。
多分rvm特有の問題だと思われる。
で、最新版を入れたらできた。
んで、Gemfileにも追加
で、アクセスしてみたら、すげーはえー。
これば良い!
とりあえずはこれでいこう。
つか、なんだこの差は・・・。
んで、コントローラ作るっぽい。
そして、構成がCakePHPそっくりでビックリする。
理解しやすくて助かるわー。
試しにViewを編集してみる。
お、ちゃんと変わってる。
いちいちサーバは再起動しなくてもいいっぽい。
ふむふむ。
んで、今までの静的なindex.htmlを削除するらしい。
ま、多分そうだろ。
長くなったので、とりあえずここまで。
ブログHeroku移転計画 その2 - 「Getting Started with Rails」をやってみた(2)へ続く。
■現在
サーバ:さくらのレンタルサーバ
言語:PHP
フレームワーク:CakePHP
データベース:MySQLけど、主に経済的な理由から以下のような環境に移行したい。
■目標
サーバ:Heroku
言語:もちRuby
フレームワーク:Rails
データベース:PostgreSQL単にサーバ代をけちりたいだけです。
めざせ!無料でブログサイト!
ということで無料のPaaSを探していたら、Google App Engineの他にHerokuに無料プランの存在を確認。
無料プランだとデータベースが5MBしか使えないらしいんだけど、今の僕のサイトが2MBも無いので、当分いいだろうと。
最近ブログも書く回数減っているしねえ。
ということで、作業を当たるに当たって備忘録を書いておこうと思う。
ここいらで自分の前提条件を書いておく。
■自分のスキル
・Ruby「楽しいRuby」で楽しい気になっているだけで、ほとんどコードを書いたことがない
・Rails初めて
・Sinatoraは簡単だと聞いてちょこっとだけ触ったことがある
・フレームワークはCakePHPよく使っているまあ、いろいろ壁がありそうだけど、なんとかなるっしょ。
ということで初めてみる。
■はじめてRailsに触る
つうことで、HerokuでRailsが動くらしいので、まずはRailsに慣れようと思う。
Sinatraの方がさくっと出来そうだけど、いい加減
「ん?なに?フレームワーク?Railsでいいんじゃない?やっぱアレだし」
って言いたいんです、すんません。
んで、Railsのチュートリアルやろうと思ったら日本語サイトがないじゃないかー。
Getting Started with Rails
こんな有名なアプリなのに無いってところがRubyの文化なのかしら。
ま、英語は読めませんがコードは読めるのでなんとかなるだろってことで前向きに進んでみる。
とりあえずrvmでさくっと環境を作る。
rvmについてはいろんなところで説明されているので、今回はパス。
あ、でも後日それはそれでまとめておこう。
■3 新しくRailsプロジェクトを作る
で、railsインストール。
$ gem install rails
$ gem install sqlite3-ruby
$ gem install pg個人的にはsqliteで良いんだけど、HerokuがPostgresなので環境を合わせとこうかなとPostgresのパッケージもインストール。なんかデプロイする時にデータベース変更できるみたいなんだけど
(そこがすげーよ、びっくりだよ)
どれがPostgres用のアダプタとして最適なのかがわからないので、ようわからんかった。
けど、pgで良いらしい、多分。
んで、アプリを作る。
$ rails new blog言われるがまま以下のコマンドを叩く。$ bundle installどうやらこれで必要なgemsパッケージをインストールしてくれるくさい。で、何が必要かは
/Gemfileで指定するっぽ。次にデータベースの設定だ。
ここで試しにPostgresを指定してみる。
@/config/databese.yml
development:
adapter: postgresql
encoding: unicode
database: development
pool: 5
username: postgres
password: postgres続けてデータベースの作成。
$ rake db:createpgパッケージがないぞ糞野郎!とか言われる。
んでいろいろ調べたらインストールしただけでは読み込まれないらしい。
で、どうするかというと以下のようにしたらOKだった。
@ /Gemfile
gem 'pg', :require => 'pg'ふむ、Gemfileの存在意義を理解した。なるほど。
これみてbundkeコマンドも動いているんじゃないかな?
依存パッケージが一箇所に集まっているのはいいね。
んで、再度db:createでデータベースがちゃんと出来ているのを確認。
どこかでRailsは環境ごとにデータベースを作成するって言ってたけど、
development_blogって出来ていたので納得。■4 こんにちわ、Rails
さて、いよいよHello,Railsだ。
PHPではフレームワークにWEBサーバまでくっついて来るってのは見たことがないんだけど、Rubyはそういうのばかりなんだよね。
Sinatraの時もそうだったし。
最初は
「なんだよ、めんどくせー」
って思っていたけども、わざわざWEBサーバの設定を気にせずにどこのディレクトリでも開発できるってのは確かにお手軽だわ。
んで、フレームワークに付属しているWebサーバで動かそうとすると大体
localhost:xxxみたいなアドレスになるんだけど、実は私、VMWare上で開発しているんで、普通にやってもまず見られないことが多々。ま、指定できるオプションあるだろうと調べたらやっぱりあった。
さすがだわー。
IPで指定するみたい。
$ rails server -b 192.168.xxx.xxxこれでhttp:://192.168.xxx.xxx:3000でアクセスしたらちゃんとみれた。うむ、良いではないか。
が、すげー重いのな。
検索したらMongrelを使えばいいんじゃね?ってことなんで、言われた通りやってみる。
$ gem install mongrelエラーが出た。ERROR: Error installing mongrel:
ERROR: Failed to build gem native extension.これどこかでみたことあるなあ。多分rvm特有の問題だと思われる。
で、最新版を入れたらできた。
$ gem install mongrel --pre--preをつけると最新版(非安定版)を入れれるみたい。んで、Gemfileにも追加
@/Gemfile
+ gem 'mongrel'これでサーバを再起動。$ rails server -b 192.168.xxx.xxx
=> Booting Mongrel
=> Rails 3.0.5 application starting in development on http://192.168.xxx.xxx:3000
=> Call with -d to detach
=> Ctrl-C to shutdown serverおー、Mongrelが起動したっぽい。で、アクセスしてみたら、すげーはえー。
これば良い!
とりあえずはこれでいこう。
つか、なんだこの差は・・・。
んで、コントローラ作るっぽい。
$ rails generate controller home indexいろいろ出来た。そして、構成がCakePHPそっくりでビックリする。
理解しやすくて助かるわー。
試しにViewを編集してみる。
@/app/views/home/index.erb
- Hello, Rails!</h1>
+ Hello, Rails! longkey1</h1>んで、アクセス。http:://192.168.xxx.xxx:3000/home/indexお、ちゃんと変わってる。
いちいちサーバは再起動しなくてもいいっぽい。
ふむふむ。
んで、今までの静的なindex.htmlを削除するらしい。
$ rm public/index.htmlで、/でアクセスしてきた場合をhomeコントローラのindexメソッドに紐付ける。@/config/routes.rb
Blog::Application.routes.draw do
#...
# You can have the root of your site routed with "root"
# just remember to delete public/index.html.
root :to => "home#index"
rootっていうのは特別なんだろうか。ま、多分そうだろ。
長くなったので、とりあえずここまで。
ブログHeroku移転計画 その2 - 「Getting Started with Rails」をやってみた(2)へ続く。
アーカイブ
2012
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
コンタクト
longkey1[at]gmail[dot]com
