メソッドの名前を聞く
メソッドの名前忘れたときに、そのオブジェクトに聞いてしまうのが手っ取り早いのに気づいた。
Railsが用意してくれるとかメソッド覚えてられない。。
例えば、数値を変換してくれるメソッドを探す時は
1.methods.grep /to_./ #=> [:to_s, :to_f, :to_i, :to_int, :to_r, :to_c, :respond_to_missing?, :to_enum]
みたいに、配列で返してくれる。
methods は、特異クラスのメソッドも全て返却してくれて、
methods(false)を渡すと、特異クラスのメソッドは省いて返却される
他にも色々あるけど(http://ref.xaio.jp/wikis/2/entries/search?q=methods)、ぱっと調べるには、methodsをgrepが楽
Railsのutf8パラメータとcommitパラメータ
Railsで検索フォームみたいなのを作るとき、RailsGuide通りにすると
<%= form_tag("/search", :method => "get") do %> <%= label_tag(:q, "Search for:") %> <%= text_field_tag(:q) %> <%= submit_tag("Search") %> <% end %>
↑みたいなコードになり、フォームから遷移するURLに
「/search?utf8=✓&q=&commit=Search」
のようにutf8パラメータとcommitパラメータがつきます。
まぁ別に困らないのだけど、よくわらないパラメータがURLに追加されるのはいまいち。。
ちょっと気になったので、それぞれ調べてみました。
・utf8パラメータ
出力自体は、↓のutf8_enforcer_tagで行われています。
https://github.com/rails/rails/blob/3-2-stable/actionpack/lib/action_view/helpers/form_tag_helper.rb#L607
helperでoverrideしろと書いてあるので、気になる場合は、overrideすればよいようです。
ただし、戻り値をなくしてしまうと、このメソッドの戻り値に対してさらにタグを追加するのでエラーが発生してしまいます。
空文字を返しておけばok。
もうちょっと調べてみると、このパラメータは、古いIE対策にセットされたものようです。
http://stackoverflow.com/questions/4104474/rails-3-utf-8-query-string-showing-up-in-url
IE5以前は、accept_charsetが無視されてしまうとかなんとか。
submitするときに、パラメータに強制的にunicode文字を含めることで対応しています。
元々は雪だるまだったのだけど、現状のRailsではチェックマークになったみたいですね。
・commitパラメータ
どのボタンが押さたのか、サーバ側で判断できるように、デフォルトでついているようです。
(params[:commit] みたいな感じで)
submit_tagから出力されるHTMLがデフォルトで下記のようになっているので、commitパラメータが付加されます。
<input name="commit" type="submit" value="Save changes">
ソースは、↓のようになっているので
https://github.com/rails/rails/blob/3-2-stable/actionpack/lib/action_view/helpers/form_tag_helper.rb#L428
submit_tag のoptionとして :name=nil を渡せばok
<%= submit_tag "Search", :name => nil %>
とすれば、inputタグのname属性が出力されなくなります。
rbenvに乗り換えてrailsにパスが通らずはまった
macportアンインストールして、homebrewインストールして、rbenvでrubyインストールした。
その辺りはたくさん情報あったのだけど、そのあとではまった。
gem install rails
してもrailsにパスが通らない
.rbenv/shims/rails
がなぜか存在しない。。
結局
gem install railties rbenv rehash
で解決した。
railsコマンドはrailsには存在してないからとかそういう感じらしい。
capistranoのメモ
capistranoをなんとなく使っていたのだけど、
今日はじめて複数環境にデプロイできるようにしたので、メモ。
複数環境にデプロイ
既にスクリプトが存在している前提ですが、
# 共通の設定は外にかけばよい set :deploy_to, "/var/www/html/#{application}" task :staging do set :user, "XXXXXXX" role :web, "XXXXXXX" role :app, "XXXXXX" # などステージング環境用の設定 end task :production do set :user, "XXXXXXX" role :web, "XXXXXXX" role :app, "XXXXXXX" # などプロダクション環境用の設定 end
てすると、
cap staging deploy
でステージング
cap production deploy
でプロダクション環境用の設定を使ってデプロイされます。
runコマンド内でsudo
普通に"sudo XXXX"てやると対話的に聞かれなくて、詰まってたのですが、こうすればよかったらしい。
run "#{sudo :as => 'root'} chown -R apache.apache #{current_release}"
CodeIgniter調べてみた
いい感じらしいという話を聞いたCodeIgniterを調べてみた。
のだけど、ライセンスで炎上中なのですね。。(http://codeigniter.jp/blog/article/64)
触ってみた感じは、すごくゆるいMVCフレームワークという感じ?
controllerとviewとmodelの仕組みは提供されていて、
/"コントローラ"/"メソッド"/引数/
みたいなURIでアクセスできて、コントローラ内で
$this->load->view("viewのファイル名")
とすれば、viewが表示される。
modelはあるけど使用は任意(!)で、db接続用の標準ライブラリが用意されている。
<?php // modelを読んでもいいし $this->load->model("モデル名"); // DBに接続してもよい $this->load->database(); ?>
最近仕事でPHPに関わり始めたのですが、素のPHPで書きたがる人てやっぱいるので(謎の自前ライブラリを多数所持してたりする)
そういう人にはCodeIgniter受けるかも。後から見る人もオレオレフレームワークよりは可読性高そう。
でも、なんかライセンスでもめてるのはマイナスですね。。残念。
はてぶはじめた
何回か始めたことあるけど1ヶ月以上続いたことないので今度は続けたいです。