«前の日記(2010-01-14) 最新 次の日記(2010-01-16)» 編集

会長@腹部日記


2010-01-15 [長年日記]

_ ruby1.9.1をインストール、tDiaryもruby1.9で運用

FreeBSD7へのバージョンアップにより自前コンパイルruby-1.8.6が動作しなくなったため、これを機にruby1.9.1をインストールしました。

意外と簡単で拍子抜けです。

ruby1.9.1のインストール手順

  • 実に普通です
    • disk quotaに引っかからないよう、--disable-install-docを指定
    • その後 --with-baserubyの指定を要求されたため、サーバにインストール済みのものを指定

 $ cd ~/local/src
 $ wget ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.1-p378.tar.bz2
 $ tar xjvf ruby-1.9.1.p378.tar.bz2
 $ cd ruby-1.9.1.p378
 $ ./configure --prefix=/home/harabu/local --enable-shared --program-suffix=-191 --disable-install-doc --with-baseruby=/usr/local/bin/ruby
 $ ./make | tee make_log.txt
 $ ./make install | tee make_install_log.txt

tdiaryの対応手順

  • shebang行を修正
  • アクセスすると、エラーになる
  • キャッシュ、カテゴリ用キャッシュの削除

(σ´∀`)σ動いた動いた

もっとも手こずったのは

quotaによるファイル数制限でございました。rubyのコンパイルで数千のファイルができていた?ようです。

_ かかりつけ小児科のお知らせページをスクレイピングすることにしました - (3) ruby1.9対応

tmailを利用していたスクリプトでしたが、tmailがうまいことruby1.9で動作しないため、直接メールを送るようにしました。

ぶつかった問題は文字コードの扱いだけでした。

 #!/home/hoge/local/bin/ruby
 # -*- encoding: UTF-8 -*-
 
 require 'open-uri'
 require 'yaml/store'
 require 'net/smtp'
 require 'kconv'
 
 #
 # clinic's url for mobile
 #
 URL = "http://www.dokoka.clinic.jp/mobile/"
 
 #
 # Mail
 #
 @smtp_server = "dokoka.smtp"
 @from = "from@dokoka.smtp"
 
 #
 # contents
 #
 def contents(url_suffix)
   text = ""
   begin
     text = open("#{URL}#{url_suffix}").read.scan(/<p class=columnM>(.*)<\/p>/).flatten.join("\n").gsub("<br>", "\n").toutf8
   rescue
     text = ""
   end
 end
 
 #
 # send mail
 #
 def send(body, from, to)
   Net::SMTP.start(@smtp_server, 25) do |smtp|
     smtp.send_message(<<-EndOfMail, from, to)
 From: from <#{from}>
 To: to <#{to}>
 Message-Id: <unique.message@smtp.dokoka>
 #{body.tojis.tojis.force_encoding("US-ASCII")}
     EndOfMail
   end
 end
 #
 # read cache
 #
 cache_data = {}
 parse_data = {}
 yaml_path    = File::join(current_path, 'cache.yaml')
 cache_data = YAML::load(File::read(yaml_path)) if File.exists?(yaml_path)
 
 #
 # parse html for mobile
 #
 open(URL).read.scan(/(information\/\d+.html)/).flatten.sort.each do |url|
   parse_data[url] = contents(url)
 end
 
 parse_data.keys.sort.each_with_index do |url, index|
   if cache_data[url].nil? || cache_data[url] != parse_data[url]
     send("Subject: Topic #{index+1}\n#{parse_data[url]}\n\n#{URL}#{url}\n" , @from, "to@dokoka.address")
   end
 end
 #
 # save url for cache
 File.open(yaml_path, 'w'){|f|f.puts parse_data.to_yaml}

むしろ、さいきん全く小児科のお知らせページが更新されていない(´・ω・`)

Tags: Ruby family

_ きょうのつぶやき : 62回