カテゴリ: ruby の記事 [リスト]
- rails(35) / ruby on railsに関するメモ。
Speaking of Rails 2.2, which is about to be released, you’ll finally be able to run rails my_app -d ibm_db. This will generate a DB2-specific config/database.yml file.ともかくgem ibm_dbの1.0がでたようだ.はやいとここいつもためさんとな.
donrailsがうごいてるdonrails.araki.netではruby1.8.5で動いているので問題ないのだが,ノートの上のsidではrubyが1.8.7にあがったようで,rails2.0.2+ruby1.8.7でtestを通らなくなった.
まずひとつ目はtruncate(/var/lib/gems/1.8/gems/actionpack-2.0.2/lib/action_view/helpers/text_helper.rb)を見てみる.
def truncate(text, length = 30, truncate_string = "...")
if text.nil? then return end
l = length - truncate_string.chars.length
(text.chars.length > length ? text.chars[0...l] + truncate_string : text).to_s
end
どうやらtext.chars.lengthというのを中で使っていて,ruby1.8.7ではtext.chars.lengthがつかえない.これはので,text.chars.to_a.lengthとすれば回避できた.1.8.7で,Enumerable::Enumerator を返すようになったのが問題なのかな.
irb(main):001:0> "hoge".chars.length
NoMethodError: undefined method `length' for #<enumerable::enumerator:0xb7be8c70>
from (irb):1
irb(main):002:0> "hoge".chars.to_a.length
=> 4
irb(main):003:0> "hoge".length
=> 4
というかんじ.はて.etchではどうかとおもったが,
irb(main):001:0> "hoge".chars.length
NoMethodError: undefined method `chars' for "hoge":String
from (irb):1
irb(main):002:0> "hoge".chars.to_a.length
NoMethodError: undefined method `chars' for "hoge":String
from (irb):2
from :0
irb(main):003:0> "hoge".length
=> 4
irb(main):004:0> RUBY_VERSION
=> "1.8.5"
あれれ.しかしどっちにしろ"hoge".lengthですむのになんでString.charsなってんだろ.国際化対応のせいなのかなあ..よーわからん.世にはこんなパッチを出している人もいるようで. http://www.ruby-mine.de/assets/2007/12/31/ruby-19-on-rails-fixes.diff
手元ではrails2.1.0 + ruby1.8.7でやる時期がきたのかもしれない.
あくまでメインは仕事のためなんだが、仕事の実装がJRubyでは動かないままだったのだが、土曜にJRuby1.0.3もでたし、railsも2.0.1でたし、ってことでちゃんと動かしてみようと。が、結果から言うと、クリーンで単純なものならあっさり動き、自分がいじっているコードはそうじゃないので大変。というものであった。いっそsvnきりなおしてcleanなとこから書きなおしてやろうか。。というかんじである。
- ActiveScaffoldはtrunkにしないとrails2.0.1では動かない。rake testの段階で詰まるのでrake testしてりゃ気がつく。
- そういうときはsvn externalするのが常套なのだがすっかり忘れていた。
svn propedit svn:externals vender/plugins
するとeditorでactive_scaffold http://activescaffold.googlecode.com/svn/trunk
- database.ymlにsocket: でmysqlのsocketをかいてやらんと、rails2.0にしたせいかdefaultの位置がズレているようでだめだった。
まあともかくどうしてくれようか感ただようので、手でdrbあげていたところも、BackgrounDRbにしたいところだし。どうするかなあ。
とはいえ1/6と1/9とにconference締切が迫っているので本質的なところで時間が。
ふと気がつくとberliosにdonrailsをつっこんでからもう1年以上たつわけですが、昨今のrails関連本のでまくりっぷりにはおどろくばかりです。
とりあえず本屋には5冊以上ならんでいるわけですが、このどちらかの本がおすすめなんじゃないかと思います。
英語版が出たときにpdfで購入したりして読んでいた本ですが、DHHのコメントがはいっていたりしますし、設計の段階の雰囲気が手書の(ホワイトボード風?)絵がはいっていたりしてなかなかいい。というかショッピングカートをつくってショッピングサイトの構築をしつつ説明をしていく前半と、後半のこまかな話がとてもいい作りの本。そういうわけで、「きちんと」というか本を前からよんだあとで使いたいんだ、という人にはむいていると思う。ただし、rails0.13?くらいの記述なので、もっともっと楽をしたい人は、webをあさる必要があるなと。
一方で、
Ruby on Rails入門—優しいRailsの育て方というくまくまーの人の本
これは、railsの使い方なんてFour Days on Railsで、さくっとわかるし、実際それで書きはじめたぜー、な人にはおすすめでしょうか。ちんたらexampleについていく必要はない人にはいいと思う。
やっぱりあたらしい本だけあって、pluginが充実している。こんなpluginがあるから楽しましょう、なのが後ろのほうにある。
rakeのつかい方ひとつとっても1.0、1.1以降ではいった微妙に便利な
rake tmp:sessions:clear
とか、そういうのまで解説がはいっている。
ふと思いたってdonrailsの中にはいってたmail2atomを独立させた。
- ruby, ActiveRecord, htreeあたりに依存している。
- 受け側は、AtomPOSTに対応している必要がある。
- 本文はtext/plain、text/htmlに対応している。multipart/alternativeだったらhtmlを使う。
- 画像ファイルが添付されていればそれもpostする。
http://code.google.com/p/mail2atom/
使いかたは簡単。svnでひっこぬいてきてから設定をかいて、.forwardを書く。
設定ファイル1 (~/.donrails/atompost.yaml)
user: ユーザ名 pass: パスワード target_url: http://donrails.araki.net/atom/post target_url_image: http://donrails.araki.net/atom/image_post certify_mailaddress: yasu@debian.or.jp report_mailaddress: yasuhiro@example.com category: misc
設定ファイル2 (~/.donrails/atomcheck.yaml)
dbfile: /home/yasu/.donrails/data.db adapter: sqlite3
.forward
"|IFS=' ' && exec ruby -I /home/yasu/tool/mail2atom /home/yasu/tool/mail2atom/atommail.rb || exit 75 #yasu"
うーむよくよめだなという話。ayさめによるアリガタイおはなしのメモ。
irbで補完したかったら
require "irb/completion"
を~/.irbrcに書いとけと。
そしてそのテのネタはdebianなら
/usr/share/doc/irb1.8/irb-tools.rd.ja.gz
に書いてあるだろうと。
requireの補完もできるとか。
automatically generate debian packages(*.deb) from gems (*.gem) in rubyforge.orgという記事。すばらしいな。
とりあえずCをつかったものはうまくいかないようだが、ほぼこまらなそうだ。さっそく使ってみることにしよう。
Pure ruby gems are converted fine. However, ones including C extensionsare not, because Debian libraries on which the gem build-depends have tobe written in the control file in a manual way.
automatically generate debian packages(*.deb) from gems (*.gem) in rubyforge.orgという記事。すばらしいな。
とりあえずCをつかったものはうまくいかないようだが、ほぼこまらなそうだ。さっそく使ってみることにしよう。
Pure ruby gems are converted fine. However, ones including C extensionsare not, because Debian libraries on which the gem build-depends have tobe written in the control file in a manual way.
DION迷惑メールフィルターというやつを使っている。
こいつは、迷惑メールだと判定したら、
X-DION-Antispam: YES
というヘッダをつけてくれるので、これをprocmailでひっかけて専用のdirにいれていた。
ぜんぶおまかせしておけばまあ、それでいいわけだが、その結果をbogofilterにつっこもうと
おもった。
この処理されたメールはmime multipartで1st partに
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 添付のメールはDION迷惑メールフィルターにて迷惑メールと判定されました。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
とかいうのがはいって、2nd partに元のメール本文がはいっている。
この内容をbogofilterにくわせりゃいいというわけでつくってみた。
はじめてTMailつかってみたけどけっこういいかんじだ。
libtmail-ruby1.8とbogofilterがあればたぶん動くはずだな。
まあはしらせると、
"/home/yaar/Mail/meiwaku/5921" Subject: Get FREE 3 Months of Starz + $100 Rebate with Dish Network! # 258 words, 1 message
みたいなのが表示されて、学習した結果は、trash-learned行き。
あまりでかいmailは学習対象からはずしてもみた。
#!/usr/bin/env ruby
require 'tmail'
learneddir = "#{ENV['HOME']}/Mail/trash-learned/"
loader = TMail::MhLoader.new("#{ENV['HOME']}/Mail/meiwaku")
#loader = TMail::MhLoader.new("#{ENV['HOME']}/Mail/meiwakutest")
loader.each_port do |port|
puts
p port.filename
mail = TMail::Mail.new(port)
if mail.multipart?
mail.parts.each do |m|
if m.main_type == 'message' and m.body.size <= 32768
begin
so = TMail::Mail.parse(m.body)
puts 'Subject: ' + so.subject
IO.popen("bogofilter -s -vv", "w") do |bogo|
bogo.puts m.body
end
bf = File.basename(port.filename)
backupfile = learneddir + bf
File.rename(port.filename, backupfile)
rescue
p $!
end
end
end
end
end
- sqliteなら、http://jamis.jamisbuck.org/articles/2005/10/03/easy-activerecord-scripts
- rails前提なら、http://wiki.rubyonrails.com/rails/pages/HowtoChangeSessionStore
- timebasedを加えて http://blog.innerewut.de/articles/2006/02/09/time-based-fragment-caching-with-memcache
in memory mysqlをNDB clusterでやるくらいならこのほうがいいんだろうかと思いつつ悩む。まあ試してみるかなと。
しかし普段debianに過剰適合しているなあと思うのがRHEL(ふるいけど3)をいじっていると思う。http://dev.mysql.com/doc/refman/4.1/ja/option-files.html
DATADIR は MySQL データディレクトリです(通常、バイナリインストールの場合は /usr/local/mysql/data、ソースインストールの場合は /usr/local/var)
とかmy.cnfが/etc直下にあるだとか。[mysqld]の中にport=3306と書かないとlistenしないとか。svn checkout svn://svn.berlios.de/donrails/branches/1.0というわけでつくった。 つーわけで donrails 1.0 RC1のtar ball http://download.berlios.de/donrails/donrails-0.99.1_20051220.tar.gz
<category term="ruby" label="るびー" /> <category term="donrails" />みたいにかける様になった。 今までもまあ対応していてはいたんだが、形式がちょっと違ったのでRFC4287にあわせた。 全体としてはこんな感じか。
<?xml ....> <entry ...> <articledate>2005-12-19</articledate> <category term="ruby" /> <category term="donrails" /> <title>donrailsリリースcandidate</title> <content>というわけで。。。。</content> </entry>