漫ろで行こう

自由気まま過ぎる、ギークになりたい男の子の話

Archive for the ‘Ruby’ category

20090927mixiVoicd01
[言語][Ruby][Webサービス]mixi エコー改め mixi ボイスへ twitter ポスト」や「[言語][Ruby][Webサービス]mixi ボイスに twitter ポストが出来ない」などで、ちょいちょい記載している Ruby を使った Twitter ポストを mixi ボイスへポストするスクリプトですが、4日ほど前から急に mixi にポストされなくなったので、原因を調査してみたところ Iconv::IllegalSequence が発生していることが判明しました。といっても、2日前くらいに直したのですが、内容はハチャメチャな暫定処理。うん、これは恥ずかしい。が、一応、何かの役に立てば的な感じでメモ。

実際にその時のスクリプト実行時エラーは以下のような感じ。

user@host:~/script/mixiEchoBot> ruby mixiEchoBot.rb 
Link: プログラミング言語 Go ドキュメント — golang_docjp v0.1 documentation http://tumblr.com/xkz43zuky
/…/mechanize/util.rb:40:in `iconv’: ”\342\200\224 golang_docjp”… (Iconv::IllegalSequence)
  from /usr/local/lib/…/mechanize/util.rb:40:in `from_native_charset’
  from /usr/local/lib/…/mechanize/form.rb:152:in `from_native_charset’
  from /usr/local/lib/…/mechanize/form.rb:144:in `proc_query’
  from /usr/local/lib/…/mechanize/form.rb:143:in `map’
  from /usr/local/lib/…/mechanize/form.rb:143:in `proc_query’
  from /usr/local/lib/…/mechanize/form.rb:166:in `build_query’
  from /usr/local/lib/…/mechanize/form.rb:165:in `each’
  from /usr/local/lib/…/mechanize/form.rb:165:in `build_query’
  from /usr/local/lib/…/mechanize/form.rb:214:in `request_data’
  from /usr/local/lib/…/mechanize.rb:401:in `post_form’
  from /usr/local/lib/…/mechanize.rb:344:in `submit’
  from /usr/local/lib/…/mechanize/form.rb:130:in `submit’
  from /usr/local/lib/…/mechanize/form.rb:136:in `click_button’
  from mixiEchoBot.rb:83
  from mixiEchoBot.rb:54:in `each’
  from mixiEchoBot.rb:54

原因はというと、Tumblr 経由で Twitter にポストした「プログラミング言語 Go ドキュメント — golang_docjp v0.1 documentation」こちらの「—」の部分。他と文字コードが違うため、Mechanize 内部の iconv で IllegalSequence エラーが発生してしまいました。
スクリプト中のボタンクリックアクション時にエラーが発生しているようなので、暫定的ではありますが無理矢理動くように、IllegalSequence エラーが発生した際にキャッチして置換をかまして再ポストするように修正。

  f = form['body'] =tweets[i]+comment
  puts tweets[i]
  form.click_button

これを以下のように無理矢理な感じで修正。

  begin
    f = form['body'] =tweets[i]+comment
    puts tweets[i]
    form.click_button
  rescue
    tweets[i] =tweets[i].gsub!(“—”,”-”)
    f = form['body'] =tweets[i]+comment
    puts tweets[i]
    form.click_button
  end

「—」だけに限らず、他にも色々と IllegalSequence エラーが発生する文字はありますがとりあえず的な。

20090927mixiVoicd01
先日「[言語][Ruby][Webサービス]mixi エコー改め mixi ボイスへ twitter ポスト」という記事を書いて実際に試してみたものの、いざ CORESERVER にて cron の設定をしてみても動作しない。
試しにローカルの Cent OS で同様のことを試してみましたが、やはり動作せず。

色々試行錯誤してみた結果、小手先の小細工が必要なことが発覚。今のところ Ruby でしか発生していないけども、今後発生しないとも限らないので覚えていて損はないかなと。

rb を実行する sh を書く

#!/bin/sh

cd /絶対パス/
/usr/local/bin/ruby /絶対パス/mixiEchoBot.rb > /dev/null 2>&1

sh を実行する crontab を書く

*/5 * * * * /絶対パス/mixiEchoBot.sh

ローカルでは上記だけで十分だったのですが、CORESERVER では更に crontab へ小手先の小細工が。
各環境変数を crontab に書く

SHELL=/bin/bash
PATH=/usr/local/bin:/usr/bin:/usr/X11R6/bin:/bin:/usr/games:/opt/gnome/bin:/usr/lib/mit/bin:/usr/lib/mit/sbin:/usr/local/mysql/bin:/usr/local/mysql/libexec:/usr/local/pgsql/bin
RAILS_ENV=production
RUBYLIB=/usr/local/lib
GEM_HOME=/usr/local/lib/ruby/gem

各パスなど(/usr/local/bin/ など)は、適宜自身の環境に合わせて修正してください。
やっと動いた……。

official.[mixi]

20090927mixiVoicd01

と言うことで「5.1さらうどん」さんがポスト用 Ruby スクリプトを公開されていたのと CORESERVER への Ruby 設定が終わったので、早速試してみました。
twitterからmixiボイスにマルチポストするRubyスクリプト書いた – 5.1さらうどん
twitterからmixiボイスにポストするスクリプト関連まとめ+修正版 – 5.1さらうどん

CORESERVER における Ruby の設定に関しては以下を参考にしてみてください。
[言語][Ruby][メモ]CORESERVER に Ruby 1.8.7 をインストール
[言語][Ruby][メモ]CORESERVER に rubygems をインストール

がしかし、CORESERVER には WWW::Mechanize と rubytter がインストールされていないので、そちらを先にインストール。

user@host:~> gem install mechanize
user@host:~> gem install rubytter

スクリプトは「twitterからmixiボイスにポストするスクリプト関連まとめ+修正版 – 5.1さらうどん」から最新版をコピペして使ってください。
尚、2行目の「require ‘Mechanize’」のままでは動作しませんので、以下のように修正してください。

require ‘Mechanize’

require ‘mechanize’

後は必要な項目を設定して動作させるだけの簡単なお仕事。

それでは良い、mixi エコー改め mixi ボイスライフを!

official.[mixi]

ruby - Copyright (C) 1993-2009 Yukihiro Matsumoto

ruby - Copyright (C) 1993-2009 Yukihiro Matsumoto

CORESERVER では Ruby が1.8.5のため、1.8.7にアップデートしたいと思います。
オフィシャルの「オブジェクト指向スクリプト言語 Ruby」から安定版の ruby 1.8.7-p174 をダウンロードしてインストール。
例によって prefix でインストール先を変更。

user@host:~/src> wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p174.tar.bz2
user@host:~/src> tar xvjf ruby-1.8.7-p174.tar.bz2
user@host:~/src> cd ruby-1.8.7-p174/
user@host:~/src/ruby-1.8.7-p174> ./configure –prefix=$HOME/local –disable-install-doc
user@host:~/src/ruby-1.8.7-p174> make
user@host:~/src/ruby-1.8.7-p174> make install

環境変数の設定および永続設定を行います。
自分は過去に「[言語][Python][メモ]レンタルサーバーで Python 追加モジュールのインストール」で設定しているので、今回は行いませんでしたが初めての人はやっておく必要があります。

user@host:~/src> export PATH=$HOME/local/bin/:$PATH
user@host:~/src> cd
user@host:~> echo “export PATH=$HOME/local/bin/:$PATH” >> .bashrc

バージョンを確認して問題なければ完了。

user@host:~> ruby -v
ruby 1.8.7 (2009-06-12 patchlevel 174) [i686-linux]

official.オブジェクト指向スクリプト言語 Ruby

Copyright © 2007, Ruby Central Inc. Ruby Central, Inc. is a 501(c)(3) tax-exempt non-profit organization. Donations are tax-deductible to the extent allowed by law.

Copyright © 2007, Ruby Central Inc. Ruby Central, Inc. is a 501(c)(3) tax-exempt non-profit organization. Donations are tax-deductible to the extent allowed by law.


CORESERVER で rubygems を使うための備忘録。

RubyForge: RubyGems: Project Info から rubygems 最新版のダウンロードとインストール。
例によってレンタルサーバーのため、prefix でインストール先は変更。

user@host:~/src> wget http://rubyforge.org/frs/download.php/60718/rubygems-1.3.5.tgz
user@host:~/src> tar zxvf rubygems-1.3.5.tgz
user@host:~/src> cd rubygems-1.3.5/
user@host:~/src/rubygems-1.3.5> ruby setup.rb –prefix=$HOME/local

環境変数への設定追加と反映。

user@host:~/src/rubygems-1.3.5> export RUBYLIB=$HOME/local/lib
user@host:~/src/rubygems-1.3.5> export GEM_HOME=$HOME/local/lib/ruby/gem
user@host:~/src/rubygems-1.3.5> source ~/.bashrc

このままでは環境変数がリセットされてしまうので、dot-bashrc に記述しておきます。

user@host:~/src> cd
user@host:~> echo “export RUBYLIB=$HOME/local/lib” >> .bashrc
user@host:~> echo “export GEM_HOME=$HOME/local/lib/ruby/gem” >> .bashrc

動作確認。

user@host:~> gem -v
1.3.5

なんて簡単!

official.RubyForge: Welcome, Ruby Central

Get Adobe Flash playerPlugin by wpburn.com wordpress themes
Proudly powered by WordPress. Theme developed with WordPress Theme Generator.
Copyright © 漫ろで行こう. All rights reserved.