2011年12月28日水曜日

Ubuntu 10.04 vsftpd の nologinの罠

/sbin/nologinじゃなくて/usr/sbin/nologin

ユーザを作成する時に、sshではログインさせたくない場合は、nologinを指定します。
(パスワードの指定もお忘れなく!)

useradd -s /usr/sbin/nologin ftpuser
passwd ftpuser

何度やってもログインに失敗する

Ubuntu10.04では、/etc/shells に/usr/sbin/nologinが記述されていません。
追記すれば認証が通るようになります。

vsftp.conf やユーザの設定は下記サイトがとても参考になります。


起動と停止のコマンド

いつもの/etc/init.d では何かメッセージが出るので、メモ。

stop vsftpd
start vsftpd

2011年11月4日金曜日

備忘録: git zsh: no matches found: HEAD^の対処方法

\でエスケープ git reset HEAD\^

zshにして、他の方の設定をそのまま流用させてもらってたら、できなくなってて涙目になってました。

こちらの記事がとても参考になります。git で zsh: no matches found: HEAD^ と出る件について

2011年9月10日土曜日

Macのシェルをたった3秒でzshに変える方法

chsh -s /bin/zsh

Macにはもともとzshが入っているので、ターミナルで上記のコマンドを実行するだけ!

zsh使いになろうなろうと思ってはや2年くらい...もう、いい加減普段からzshにします。

2011年7月7日木曜日

Rails3のhas_manyで他のnamespaceのモデルと連結させる方法

(過去の)あたしってほんと、バカ

プログラマーて、そう思う事ってよくあるよね。後でいい方法が思い浮かんだり、むしろ、過去の自分が何を考えていたのか分からなかったりとか。アハハ!

余談はさておき(余談からはじまっとる...)

:class_name, :foreign_key, :source

これらhas_manyのオプションをうまく利用してあげれば、うまくassociationを組むことができます。例えばこんな感じ

class Admin::Post < ActiveRecord::Base
  has_many :post_products, :class_name => 'PostProducts', :foreign_key => :admin_post_id
  has_many :products, :through => :post_products, :class_name => 'Product'
end

上の例は、管理者が投稿する機能に、関連商品を結びつけるためのアソシエーション。中間テーブルを使ってるパターンです。

まぁ、グレーゾーンなモデルはネームスペース付けずに作っておくべきかも

public/privateとか、どっちかじゃなくて、どっちも所属するようなモデルはネームスペース付けとかない方が、後々いいなと思いました。

アジャイルとはいえ、DB設計って大事!以上!

2011年7月2日土曜日

Rails3 (3.1対応)のレシピブックが出るよ! - Rails3レシピブック 190の技

松田明さんも加わって、世界最速で3.1対応

松田明さんのkaminariにはいつもお世話になってます。前回のレシピ本では183の技でしたけど、 今回は190に増えてる。そしてRails3.1にも対応というのは嬉しい。まだ3.1の正式版はリリースされていないけど、 すぐにリリースされるだろうし、Railsはどんどん進化していくので、その情報が得られるのは助かります。 この本を手に入れたらレビューを書こう

ジュンク堂池袋本店でイベントがあるようです

最新のRuby on Railsの魅力を語る~3.0、3.1、3.2、そして4.0へ~

日時
2011年7月21日(木)19:30~
会場
4階喫茶にて。入場料1,000円(ドリンク付)
定員
40名
受付
1階サービスカウンターにて。電話予約承ります。

定員があるので、予約しておいた方が良さそうですね。え、もうRails4の話もあるの??という感じですが、気になりまくり。

追記(2011/08/08):本買いました!

RubyKaigi 2011で先攻発売&著者3人によるサイン会もあったので買いました。

Rails3でRoutingが大きく変わって、より簡潔に書けるようになってますが、どうやって書くのかとか、RailsではなくRackアプリで高速にレスポンスさせたいとか、大きく変わったモデル周りのこと、知っといて損は無いし、むしろ知っておいた方がいいことや、参考にサンプルが詰め込んであるし、解説がちょうど良い量で入っていたり、参考になるコラムが含まれているので、これはおすすめです。

2011年6月16日木曜日

deviseのconfirmationメールをプレーンテキストで送る方法

携帯とかHTMLメールだとアレじゃない...

なので、テキスト形式で送りたいよ!と思っちゃう。そんな時は、$RAILS_DIR/app/views/$DEVISE/mailer/confirmation_instructions.html.erb のhtml.erbをtext.erbに変えればOK!

できたらメアドからテキスト形式とHTML形式と振り分けたいかなーと思ったけど、めんどくさかったので、この方法でやることにしました。

2011年5月25日水曜日

Rails3.1でCoffeeScript SCSS HTTP Stream jQuery defaultな件...

CoffeeScriptとSCSS

Rails 3.1から、appフォルダ内にassetsというフォルダができて、その中にjavascriptsとstylesheetsというフォルダができるようになった。そしてそこにCoffeeScriptファイルやSCSSのファイルを置くようになります。CoffeeScriptは、JavaScriptの冗長的な書き方ではなくRubyやPythonのように書いて、それをJavaScriptにコンパイルするというものですが、Rails 3.1では拡張子を例えばapplication.jsとすれば普通のJavaScriptファイルですし、application.js.coffeeとすればCoffeeScriptとして扱われ、コンパイルも自動で行われます。つまり完全にオプション的な扱いです。ですが、書き方になれると普通のJavaScriptには戻れなくなりそうですねー。

SCSSはCSSをネストして書いたり、変数を使って書けたりするものです。SASSというのもあって、こちらはもっとプログラマーよりで関数定義までできちゃうんですが、Rails 3.1ではSCSSが採用されました。CSSを書いていると、同じものを書く事がよくあります。例えば角丸border-radiusとか。そういうのはクラスにまとめればいいんですが、クラスにまとめるか、個別に持っておくべきか迷うことがあります。そう言う時にSCSSのmixinは便利そうです。そしてネストさせることで、セレクタよりも直感的に分かりやすくなりそうだなーと思います。

HTTP Stream

PHPでいうところの、ob_flushとかをやるのと同じです。これ、個人的に何が嬉しいのかよく分からなかったんですが、出力に時間がかかる部分で、先に出せる物は出しておいてユーザの体感速度をあげるというのが一つの狙いのようですね。たとえば、headまで出しておいて、そこに含まれるcssやcssに含まれる画像は先にダウンロードさせておくなど。まぁ、でもそこまで重いページって用意したくないし、Rails3のActiveRecordはRails2のActiveRecordより遅いというデータもあるらしく、そちらの改善も期待しています。ActiveRecordばかりに頼らずに最適化しろっちゅー話なんですけどね><

ちなみに、この機能はFiberがないと動かないらしく、Ruby 1.9以上が必要になります。まー実質1.9.2ですね。あと動作環境がnginxとunicornである必要があるようです。Apache+Passengerの環境もサポートしてくれないのかな?両方使ってるので後者もサポートしてほしいですねー。

jQueryがやっとデフォルトに

やったー!てっきりRails3からデフォルトになると思ってたので、やっとこの日が来たか!という感じです。

あー、早くRails 3.1で開発してみたい。

CSS Nite in MIYAZAKI, Vol.2を開催しました

参加された方々、ご協力くださった方々、本当にありがとうございました

CSS Nite in Miyazaki, Vol.2 スマートフォンがキターーー!を、前回から約半年ぶりに開催しました。今回のテーマはスマートフォンということで、講師にCSS Nite主催の鷹野さん、H2Oのたにぐちまことさん、Androidユーザ会宮崎支部支部長の山根さんに登壇していただきました。そして今回初の試みでLTをしました。LTの出演は、あてくし(CSS Niteではマシオカという名前で活動してます)、Seven Studioのwa3さん、eaterの後藤さん(飛び入り)と黒葛原道さんでした。

二回目の開催だけあって、前回に比べスムーズに行った点があり(^_^)v、その反面、課題が浮き彫り(orz)となる感じもありましたが、今回も参加者の方々やご協力くださった方々のとっても温かい人情に恵まれて、無事に終了することができました。本当にありがとうございます。声をかけて下さる人たちの言葉が宝物みたいでした。あぁ、開催できてほんとよかったー(T_T)

ところで、LTやりました

そうです。出演してみたんです。ビビりが紛いなりにも...

で、結果?はといいますと、タイムオーバーの無効試合という感じ。というか、発表前日に事件があって、まぁ、もっと余裕をもって仕込んでない自分が悪いんですが、LTのメッセージが「Mobile Safariじゃファイルアップロードできないから気をつけろ!」に入れ替わってしまう寸前でした。いや、むしろそう受け取ってもらった方が知らなかった人にとってはプラスでしょうね。LTの話はスマホサイトをRailsでやってみようという内容だったんですが...。準備した内容はフォローアップで流させてもらうんですが、ちょっと欲張っていろいろ詰め込んでしまってて、よく分からない内容に仕上がってしまったというのが正直なところです。この辺はいずれRubyユーザ会宮崎で、知りたい人にはフォローできればと思ってます。んー、今思うと、LTなんだから、jQuery Mobileでアニメーションするより、CSS3でできるものはそっちを使った方がパフォーマンスが(大体)いいよ!とかいう話の方がよかったですねぇ...。また出演する機会がありましたら、次はもっと皆さんに満足してもらうような内容にできるよう頑張りたいです。

そしてアンケートに書かれたコメントに感動中

な、なして、みんなこげんに優しいとじゃ...というコメントの数々に泣かされてます。ほんと、皆さん温かいですね。だからこそ、もっともっといいものを提供したったという思いが強くなります。今回出演してみて本当に良かったです。出演側の状況も把握するいい機会にもなりましたし、必ず次ぎへつなげたいと思います。

あ、あんなゆるキャラが真面目な感想を書いてしまった...w

ところで、毎回というとまだ2回しか開催してないのであれですが、懇親会に参加した方の充実度はより一層違うみたいです。懇親会には何かありますね。というか、運営側の自分もスタッフというのを忘れて飲み食いして楽しんじゃってましたから。やっぱり同業者とざっくばらんにいろんな話ができるっていいですね。今回も皆さん楽しそうで良かったです。CSS Niteで好きなシーンは、講師の話に参加者が夢中になってシーンとなるところ、いい技を見て「おお!」って声があがるところ、面白い話に笑いが出るところ、そして懇親会で賑やかに会話してるところですね。本当に素晴らしい会を開いているんだと実感できる最高の瞬間です。さー、また、次回に向けてやっていきますかね!!笑 では皆さん、また近いうちにお会いしましょう!ありがとうございました。

参加者の感想がブログにあがってるようです

リンクしちゃいます

2011年5月8日日曜日

Ruby On Rails 3をこれから始めたい人へ

初心者向けの本が出るようです

目次

Amazonの目次は参考にならないので、著者のサイトの目次を参考にした方がいいです。目次

結構いいかも

この本はまだ読んでませんし、購入する予定もないのですが、目次を見ると、結構初心者向けとしてはいいかもしれないと思います。チュートリアル系というよりかはリファレンス系という感じでしょうか?でも、結構リファレンスは大事で、フレームワークを使うからには、ゆくゆくは使いこなさないといけなくなります。チュートリアルをやって、異文化体験をしてはい終わり、ならWeb上にあるチュートリアルでもやるなり、スクリーンキャストを見て満足すればいいのですが、自分でオリジナルなものを作って行く時は、そういったチュートリアルからある意味脱線して行きます。その脱線する際に、情報を調べる為の手助けになるのがリファレンスやサンプル(レシピ)集です。チュートリアルだと、チュートリアルでしか使わないものの説明にとどまるので、アソシエーションを組んでもそれをどうやってフォームヘルパーを使ってやるのかの説明がなく、初心者は路頭に迷う事があると思います。そういった時にヒントやキーワードになるものが少しでも多く埋め込まれている情報に出会えるのは大事なことです。Rails3やってみたいと思っている初心者の方は、一度本屋にでも行ってどんなものか見てみるといいと思います。そして、間違えてRails1.2やRails2の本を買わないように気をつけて下さいw 日本語で書かれている本でRails3の本はこれでまだ2冊目だと思います。

2011年3月25日金曜日

Facebookのいいねボタンで日本語URLが使えない罠

一部では動作するページも見受けられるのですが...

このバグについては対処しないようです。Fワードを叫んでやりたいぜ!

ちなみに、日本語を含んでてても動作するページは最後に.htmlとか入ってました。ASCIIで終われば動くのかな?よく分かりません。エンコードした正しいURLだろうが、デコードされることを考えて二重にエンコードしようが、とにかくダメなものはダメでした。

2011年2月27日日曜日

Rails3でTypeError (expected Hash (got Array) for param

はまったよ...

[Railsのキホン]リクエストパラメータ、こちらの記事がとても参考になりました。

原因

原因はinput系要素のnameの配列でした。

user[][name]
user[][favourite]
user[address] # <- これが原因!!

解決後

user[][name]
user[][favourite]
user[]address] # -> user[][address]に変更

ひあー...

ちょっと入り組んでるフォームを作ってたので、いろいろと出現条件が違うものを。原因が出る条件は特定できたんですが、その後が... たったこれだけの間違いに2時間くらいパーにしました(T_T) PHPとは扱いが違うのは分かってたんですが、いい勉強になりました。

2011年2月25日金曜日

Debian Lenny Ruby1.9.2でRMagick 2.13.1を入れる

情報源

How do I install ImageMagick 6.5.6 on Debian Lenny?

Debian LennyのRMagickがgem install時に古くて怒られる

しかもpngのリサイズ時にバグがあるんだそうです... じゃあ新しいのを入れてやる!ってことで頑張ってみました

インストール手順

vim /etc/apt/sources.list
deb-src http://http.us.debian.org/debian squeeze main contrib non-free

apt-get update
apt-get build-dep imagemagick
apt-get source imagemagick
cd imagemagick-6.6.0.4
debian/rules binary
cd ..
dpkg -i *.deb

gem install rmagick

2011年2月23日水曜日

オブジェクト指向 デザインパターン DDD

エリック・エヴァンスのドメイン駆動設計

読んでみたいが、これ高い!! 高い上にきっと内容も難しい。難しいというか、オブジェクト指向ができるかつデザインパターンは習得してるレベルでないと、きっと本の中になんの躊躇もなく出てくると思う。以前に、DDDのPDFをInfoQあたりが無料で公開していたので落としたことがあって、それを昨日ちょっとだけ見てみたけど、ファサード、ファクトリが図に出て来ていた。今読んでもきっと消化不良を起こすだろうから、もう少しオブジェクト指向プログラマーとしてのレベルが上がったら読んでみたいと思う。

2011年2月17日木曜日

JavaScriptパターンを読んでみたいなぁ

JavaScriptパターン ―優れたアプリケーションのための作法

やっぱり発売と同時に在庫が切れてますね。さすが。

この本は原書の評価が高いのと、目次を見れば分かるけど、コーディングパターン、デザインパターン、アンチパターンを扱ってるのが伺える。この3つのパターンをざっくり説明すると、コーディングパターンはこういう書き方をしましょう、アンチパターンはこういうやり方or書き方はやめましょう(そのかわりの解決案が提示されると素晴らしい)、デザインパターンはGoFとかの...(説明する必要はないですね!)。JavaScriptを普段からがっつりやってるわけじゃないし、自力でライブラリ作ったりはしてないけど、やっぱりモダンな書き方というか、よりスマートでバランスのいい書き方というのは追い求めたいです。そういう書き方を知ってることで他のライブラリを読む時の助けにもなるし、パターンというのは本来そういうもので、いわゆる言語の中の共通言語的な役目もある。共通認識をほとんどずれなく素早く得るためのもの、という感じ。ストラテジパターンで作っといて!といって通じれば早いし、ストラテジパターンか!とパターンに当てはめて理解できれば早い。デザインパターンに限らず、グローバルを汚染しない書き方や、べからず集もまとまってそうだから読みたいなー。読んだら書評を書きます。献本大歓迎です!笑

RailsでセッションIDを取得する方法

request.session_options[:id]

session[:session_id]とかsession.session_idじゃなくなったようです。

2011年2月13日日曜日

TextMateの補完(esc)に別のショートカットを割り当てる方法

ESCは遠いのでControl + .にしたい

環境設定 > キーボード > キーボードショートカット > アプリケーション
ここで+を押して追加する。アプリケーションにTextMateを選んで、名前をNext Completeとして、好きなキーを割り当てましょう。

2011年2月12日土曜日

Railsのメールでヘルパーを使うにはhelperを使う

no methodエラーだと... 同じviews内にありながら!!

理由が分からないけど、helperで読み込んであげればOK

class OrderMailer < ActionMailer::Base
  helper :OrderHelper
  ...
end

2011年2月10日木曜日

Rails3でURLエスケープ

uを使う

意外と検索しても出てこないので、CGIとか使わなくてもいけますよ!ということで。

<a href="/<%= u '日本語URLとか?' %>">日本語URLとか?</a>

2011年2月5日土曜日

Rails3でアソシエーションを組んだモデルのフォームの書き方 fields_for

one-to-one has_oneな関係の例

今回はよくあるユーザとユーザの詳細データをテーブル上切り分けた例でやってみます。

class User < ActiveRecord::Base
  has_one :profile
  accepts_nested_attributes_for :profile, :allow_destroy => true
end

class Profile < ActiveRecord::Base
  belongs_to :user
end

# app/views/user/_form.html.erb
<%= form_for :user do |f| %>
  <%= f.label :name %>
  <%= f.text_field :name%>
  <%= f.fields_for :profile do |pf| %>
    <= pf.label :favourite_music %>
    <= pf.text_field :favourite_music %>
  <% end %>
<% end %>

fields_forを使えばOK!

これで動くのだから便利!user_addressでやってみたところどうもうまくいかなかった。もしかしたら、アンダーバーを入れた場合にバグがあるかもしれない。また今度試してみよう...

2011年2月3日木曜日

Rails3でurlのidの部分にid以外のものを指定する to_paramメソッド

/:controller/:show/:idだとSEO上ねぇ...とかidだとまずいんだよね...とか

SEOや視認性の高さを優先したい場合はidじゃなくて、別なフィールドやidと何かを混ぜたものにしたくなると思います。そういう時はモデルのto_paramメソッドをオーバーライドすればOK!

class Cart < ActiveRecord::Base
  def to_param
    hashed_id.parameterize
  end
end

あとはroutes.rbを修正するなどしましょう。

2011年1月24日月曜日

Rails3 複数のカラムでユニーク

ツリー構造のカテゴリで

例えば、カテゴリ名を重複させたくないというのは簡単だけど、親子関係を持つカテゴリで親同士内、子同士内、孫同士内ででだけ名前の重複をさせたくないという時にRailsでどう書くのか。

マイグレーション

def self.up
  create_table :categories do |t|
  ...
  end
  add_index :categories, [:parent_id, :name], :unique => true
end

モデルのバリデーション

class Category < ActiveRecord::Base
  acts_as_tree
  validates_uniqueness_of :name, :scope => :parent_id
end

MySQL 5.5.8をDebian 5 lenny にインストールしてみた

ソースからコンパイル

ちなみにsakura VPSに入れたのですが、もともとMySQLが入っていたっぽかったので、whereis mysqlで出て来たものはディレクトリごとrm -rfしましたw

apt-get install libncursesw5-dev cmake
wget http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.8.tar.gz/
tar zxf mysql-5.5.8.tar.gz
cd mysql-5.5.8
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql/5.5.8 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci
make
make install

パスを通す
vim ~/.bashrc
export PATH="${PATH}:/usr/local/mysql/5.5.8/bin"
保存

source ~/.bashrc
# あ、~/じゃなくてちゃんとシステム全体に反映されるのに書いた方がいいな...と今思った


groupadd mysql
useradd -g mysql mysql

chown -R mysql /usr/local/mysql/
cd /usr/local/mysql/5.5.8/
script/mysql_install_db
# 新たにファイルが作成されるのでアクセス権を再度設定
chown -R mysql /usr/local/mysql
mysqld_safe --user=mysql &
mysql_secure_installation

vim /etc/ld.so.conf.d/mysql.conf
/usr/local/mysql/5.5.8/lib
保存

ldconfig

# ついでに自動起動も
install -o root -g root -m 755 /usr/local/mysql/5.5.8/support-files/mysql.server /etc/init.d/mysql
chkconfig --add mysql

あなたも漢(オトコ)のコンピュータ道: MySQL 5.5新機能徹底解説を読んで「うぉぉおおお!!」となって、MySQL5.5をサーバにインストールするといいよ!

2011年1月16日日曜日

Macでgit completion

コマンドとブランチをtab補完しよう

Gitはコマンドが多い! alias作っとけよって話かもしれませんが、aliasは補完じゃなくてpush origin master とかを短いオレオレコマンドにしちゃおうというエイリアスですから用途が違う訳です。今回はブランチまで補完できるようにしちゃうよ!

~/.profileに書き込む

git-comletionのスクリプトが必要ですのでmdfindでどこにあるか探しましょうw 以下はgit-osx-installerでインストールしたおいらの環境での例

if [ -f /usr/local/git/contrib/completion/git-completion.bash ]; then
  source /usr/local/git/contrib/completion/git-completion.bash
  PS1='[\W$(__git_ps1 " (%s)")]\$ '
  export PROMPT_COMMAND='echo -ne "\033]0;${PWD/#$HOME/~}\007"'
fi

source ~/profile としておけばOKです。

使い方

  • git co<TAB> とするとcommit configが出ます さらにmを押してタブキーを押すとgit commitになります
  • レポジトリで git push <TAB> とするとブランチのリストが出ます 便利!

2011年1月15日土曜日

Rails3でPHPのnumber_format関数はnumber_with_delimiter

ActionView::Helpers::NumberHelperに定義されている

とくにincludeすることなく使えるのでビューに以下のように書けばOK!integerでもstringでもOK!

# pruduct.price = 1000
<%= number_with_delimiter product.price %>
# 1,000が表示される

価格はnumber_to_currency

ロケールとcurrency format unitがja.ymlで設定されている場合は、number_to_currencyで3桁ごとにコンマがふられ、最後にja.ymlのunitが表示される。

# pruduct.price = 1000
<%= number_to_currency product.price %>
# 1,000円 と表示される

2011年1月14日金曜日

MacでMySQL5.5を入れたらmysql2使ってたからRails3君が動かなくなってん

こんなエラーが

Referenced from: ./rvm/gems/ruby-1.9.2-p0/gems/mysql2-0.2.3/lib/mysql2/mysql2.bundle
Reason: image not found - .rvm/gems/ruby-1.9.2-p0/gems/mysql2-0.2.3/lib/mysql2/mysql2.bundle

とか gem install mysql2で

Enclosing class/module 'mMysql2' for class Client not known

などなど

install_name_toolで解決

上記のエラーはmysql2-0.2.3になってますが、途中で最新版に上げたので、以下のはmysql2-0.2.6の解決方法です。というかパスを返ればmysql2-0.2.3でもきちんと動きます。

sudo install_name_tool -change libmysqlclient.16.dylib \
/usr/local/mysql/lib/libmysqlclient.16.dylib \ 
~/.rvm/gems/ruby-1.9.2-p0/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle 

gem install mysql2のオプション

これは関係があるか分からないけど、 --with-mysql-dirをしといた方がいいかも

gem install mysql2 -- --with-mysql-dir=/usr/local/mysql

動くようになりました

ワイ!MySQLのUTF-8は4バイト以上のものは5.5からサポートされたらしいので、難しい漢字(日本人の人名漢字も含まれる><)サーバ側も近々アップグレードしないと...

2011年1月13日木曜日

Rails3でキャッシュを解放する時にSweepを使ってオブザーバーパターン!!

Sweep!

キャッシュ解放の命令をコントローラに直接書きたくないんだ!

# app/top_controller.rb
caches_page :index

# app/posts_controller.rb
cache_sweeper :post_sweeper

# app/sweepers/post_sweeper.rb
class PostSweeper < ActionController::Caching::Sweeper
  observe Post

  def after_create(post)
    expire_public_page
  end

  def after_update(post)
    expire_public_page
  end

  def after_destroy(post)
    expire_public_page
  end

  private
  def expire_public_page
    expire_page :controller => 'top', :action => 'index'
  end
end

上記の用に、ActiveRecordを監視して、キャッシュをお掃除するという感じです。コントローラのcreate/update/destroyに埋め込むより、素早くどこでキャッシュを解放しているかが分かるのでいいですね。

キャッシュがpublic/index.htmlだったりする件について

キャッシュがうまく消えなかったあの頃、ビューファイルをいじっても反映されず、development.rbのキャッシュを無効にする設定をやっても反映されず... どうしたんだぁヘヘイベイベー!と清志郎の歌を歌いながらgit statusしてみたら、public/index.htmlが復活していた!

これはパフォーマンス上はいいと思うんだけど、認証が前提のグループウェアとかの場合って、静的ファイルになっちゃうと困る部分がありますよね。ここら辺はどうするんだろう。きっとうまいやり方があるんだろうな。そのうち必要になったら調べよう

追記: Railsのキャッシュの種類

調べました。Railsには、

  • ページキャッシュ
  • アクションキャッシュ
  • フラグメントキャッシュ
の3タイプのキャッシュがあって、今回のページキャッシュは静的ファイルを生成するものでした。残りの2つのキャッシュについては近い将来絶対に利用すると思うので、その時にまとめられたらいいなと思ってます。

2011年1月11日火曜日

Rails3のRoutesでnamespaceとform_forに挑む

Adminルーティング的な事をしたかったのよっ!

例えば、ブログもそうだけど、一般の人がなんでもかんでもデータを操作できるのはまずいから、管理者用のページを用意するけど、意外と管理者用のページが多いと、コントローラを管理者用と一般用とに分けておいた方がいいんじゃね?ってなりますよね?この考え方が間違ってるとなれば、もうここから先は全くの無駄になってしまうんだけど、とりあえずやってみてうまく動いたから書いておきます。意外と躓くところなんじゃないだろうか

config/routes.rb

namespace 'admin' do
  resources :posts
end

admin/posts_controller.rb

#new, edit, create, updateなどで
@post = Post.new #など Postのインスタンスを入れる (AdminPostではない)

posts/_form.html.erb

<%= form_for [:admin, @post] do |f| %>

たったこれだけ。まじ簡単。app/controllers/adminの中のコントローラはログイン画面以外を除いてあとは全部認証が通ってないとアクセスできないことにしておけばいいからアクセス権限周りのことが把握しやすい構成になると思います。namespaceじゃなくてscopeでもいいんじゃ?とかあるかもしれないけど、その辺の判断はまだできてないから今後の課題です。勉強中!

2011年1月7日金曜日

Rails3で404 Not Foundを返してTemplate Missingエラーも出さない方法

何も描画したくない!

render nothing: true

404 Not Foundを返したい

render status: 404

これを合わせると

render status: 404, nothing: true

簡単。びっくり。