irbが素晴らしい! 惚れた!! PHPとかクソ!!!
Railsはコントローラーのディレクトリにサブディレクトリを作れるのか!
なんじゃそれ! 『Railsによるアジャイル〜』の15章 P239〜P240を読んでいてクリヴィッツテンギョウ!!! app/controllers/admin/book_controller.rb
ということができるらしい! んで、そのときのクラス宣言は
class Admin::BookController < ActionController::Base
となるらしい! 変態だ!! ぜったい変態だ!!!
Railsむずい
CakePHPはなんも考えなくてもテキトーにやってたらサイトできてたんだけど、Railsはそんな風にはやらしてもらえない。Railsのサイト作んの自体の効率性が悪い訳ではもちろんないんだけど、レールに乗るためにはそれなりに知っとかなきゃいけないことが多い感じ。『Railsによるアジャイル〜』はいま14章まで読んだ。14章はテストの章だったんだけど、初めてテストに触れた感じ。CakePHP 1.2の公式ガイドにもテストについての章はあったけど、後ろの方でおまけみたいな感じだったから飛ばしちゃってた。たまたま先月の頭に買ってた『WEB + DB Press 56』がRubyでのテストを紹介してて、そこを読みながら14章のコードを写経していったけど、わりと早い段階でテストの重要性が説いてあって、アジャイル本はしっかりしてるわと思った。
たのしいネットストーキング with Ruby
この前大阪で第二回アメ村ブルゾンの会をやったんですけど、そこで日夜ネットストーキングプログラミングにいそしんでおられる皆さんとお会いして、TwitterのStreaming APIの使い方を教えてもらいました。なんか自分でやろうとしてたんだけど、全然見当違いなところを見ていたみたいで、僕もStreaming APIでネットストーキングできるようになりました。pokutunaさんにもらったコードと "Twitter Streaming APIをRubyで試してみる - しばそんノート":http://d.hatena.ne.jp/shibason/20090816/1250405491 を参考に、以下のような感じにしてみました。
#!/usr/bin/env ruby
# coding: utf-8
require 'net/http'
require 'uri'
require 'rubygems'
require 'json'
USERNAME = 'morygonzalez'
PASSWORD = '***'
uri = URI.parse('http://chirpstream.twitter.com/2b/user.json')
begin
Net::HTTP.start(uri.host, uri.port) do |http|
request = Net::HTTP::Get.new(uri.request_uri)
request.basic_auth(USERNAME, PASSWORD)
http.request(request) do |response|
raise 'Response is not chunked' unless response.chunked?
response.read_body do |chunk|
#空行は無視
status = JSON.parse(chunk) rescue next
#eventを含まないものは無視
next unless status['event']
source = status['source']
if status['target_object']
target_obj = status['target_object']
target_user = target_obj['user']
puts "#{status['event']}: #{source['screen_name']} -> #{target_user['screen_name']}: #{target_obj['text']}"
elsif status['target']
target = status['target']
puts "#{status['event']}: #{source['screen_name']} -> #{target['screen_name']}"
end
end
end
end
rescue Timeout::Error => ex
p "<-----!!!! Timeout::Error!!!!----->"
retry
end
教えてもらったコードではTweetの内容を垂れ流しにするやつだったんですけど、自分でちょこっといじってTweet以外のステータスを表示するようにしてみた。しかしなんか調子悪いっぽくて、完全にはStreamを取れてないっぽいです。
でもまぁ一歩前進したことは確か。Rubyがんばるぜ。
CakePHP 1.2.xのRSSヘルパーはわかりにくい
ちょっとCakePHPで作ってるサイトでRSSフィードを配信したいと思ったのでやってみたんだけど、思いの外面倒くさくてびっくりした。『RailsによるアジャイルWebアプリケーション開発』を読みながらRails 2.3.5でRSSフィード作るときは結構簡単だった気がするので、正直これはないわと思った。
『Railsによる〜』で作ってるデモプロジェクトのdpeotのコードを見てみると、RSSを配信するときはControllerに以下のように記述し、
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @products }
end
config/routes.rb
に
map.connect ':controller/:action/:id.:format'
と書いたあと、RSS用のViewを用意してやるだけだ。ものすごくシンプルで簡単だった。
CakePHPで同じことをやるためには以下の手順が必要。
ちょっと面倒くさすぎてやる気にならなかった。どうせいま僕が作ってるサイトなんてRSSリーダー使うような人が見るサイトじゃないし、フィード配信機能の実装はそんなにプライオリティ高くないので他にやることがなくてどうしようもなく暇なときにでもやろう。
Railsは最初のとっかかりのハードルは高いけど、使い方を覚えていったらやっぱりCakePHPとかよりも全然簡単かつ高速に開発できる気がする。レールに乗ってる感強い。このMephistoの設置もすごく楽だった。ただTerminalを使い慣れた人や、サーバーにSSHでアクセスできる環境じゃないとRailsアプリケーションを使うのは難しい。CakePHPは反面、全部FTPでアップロードすれば良いのでサーバーに標準的な構成でPHPがインストールされてりゃ環境構築でつまずくことはない。どっちをとるかって話ですよね。
僕はファッションの観点からRailsを選びたい。
Google Analytics Pluginが動かない
MephistoでGoogle Analytics使おうと思ってググったら Ruby on Rails Plugin: Google Analytics (blue egg edition) - artweb design というのが出てきたので、早速インストールしてみたんだけど動いていないっぽい。
Mephistoは「rails blog」でググって一番上に出てきたので深く考えもせずにインストールしてしまったんだけど、一年近くバージョンアップされてないし、いまはあんまり活発に開発が行われてるわけじゃないっぽいな。
追記
一晩寝て起きたら動いてた。
Linuxのブート中にキーボードをがちゃがちゃやると危ない
Linux(CentOS 5.4)がずーっと起動しっぱなしだったので、たまにはリブートするかと
sudo reboot
かけた。普段、サーバーにはモニターもキーボードもつないでいないので、このままだと「キーボードがないわよ」みたいな警告が出てブートが途中で止まる。たいていキーボードをつけてがちゃがちゃやると「キーボード発見しました」みたいな表示が出てブートが進むので、モニターはつながず、キーボードだけつないでがちゃがちゃやっていた。しかし…。
ブラウザーからサーバーにアクセスしてもつながらない。あれ? sshでMacBookからサーバーに入り、
/etc/init.d/httpd configtest
してみると
httpd: Syntax error on line 210 of /etc/httpd/conf/httpd.conf: Syntax error on line 1 of /etc/httpd/conf.d/ruby.conf: Cannot load /etc/httpd/modules/mod_ruby.so into server: /etc/httpd/modules/mod_ruby.so: cannot restore segment prot after reloc: Permission denied
とか出る。えー? mod_ruby.so が読み込めないのかー。mod_rubyを再インストールしたり httpd.conf を書き直してみたりしたんだけど効果なし。同じエラーで困ってる人いないかと、「mod_ruby centos エラー」とかでググってみたんだけど、そういう人は見つからず。キーワードを変えて「cannot restore segment prot after reloc: Permission denied」でググってたら以下のサイトにたどり着いた。
なるほどそういうことか。どうやらモニターにつながずキーボードをがちゃがちゃしていたときに /etc/selinux/config の設定を変更してしまっていたみたい。(SELinuxの小技)
結局、 /etc/selinux/config を編集して
SELINUX=disabled
として無事Apacheが起動できるようになった。
午前中の時間が無為に過ぎて行ってしまった…。