FC2ブログ

blogaomu2.1はこの度、http://blogaomu.comに引っ越しました。最新の更新はblogaomu.comにて行なっておりますので、ブックマーク・RSS等の設定をお願い致します。

My first RubyKaigi

DSC_0218_.jpg
こんにちは。
2011年7月16日~18日にかけて開催されたRubyKaigi 2011に行ってきたのでそこで感じたことをつらつら書いていこうと思います。ちなみに参加したのは7月17日の1日だけでした。もっと参加したかったのですが、あいにく予定が入っていたので。

続きを読む

スポンサーサイト



シェアはこちらからどうぞ

このエントリーをはてなブックマークに追加

おはようござるbotをgithubにpushしました

こんにちは!
今回はおはようござるbotを github に公開してみたので、備忘録を残しておきます。

おはようござるbotについては過去のエントリーを参照下さい。
blogaomu2.1: さくらインターネットのレンタルサーバーでcronからRubyプログラムを実行するときに躓いたのでメモ
blogaomu2.1: pitを使ってみたかった

github は前々から気になっていて、いずれはソースコードを公開したいなと思っていました。ようやく拙作ができあがったので github 使ってみようという流れになりました。
以下の作業手順は、予め github のアカウントを持っていて、開発環境で git を使用している、という2点が前提となっております。ご了承下さい。

参考)
Git入門 ゼロから始めるGitドリル-エンジニアは空を飛ぶ
github.comでphp-users.jpを管理するまでの作業ログ | IDEA*IDEA

github へのソースコード公開手順

sshの設定

最初に ssh の設定を行います。
参考)Help.GitHub - Set Up Git
こちらの参考ページの通りに設定しました。英文で書いてありますが、コマンド例があるので最低限それを自分の環境に合わせて実行すれば大丈夫かと思われます。

リポジトリ作成

次に、github のサイトでリポジトリを作成します。
参考)Help.GitHub - Create A Repo
Project Name (必須)、Description、Homepage URLを記入して Create Repository をクリックします。すると、レポジトリが作成されます!なんて簡単なんでしょう!!!

ローカルリポジトリを github に push

いよいよ、ローカルにあるリポジトリを github に push します。プロジェクトディレクトリに移動して、以下のコマンドを打ちます。
$ git remote add origin git@github.com:user name/project name.git
$ git push -u origin master
github にリポジトリを作成すると、ソースコードをアップするコマンドが何種類か表示されるので、それをコピーしてコマンドを実行すればOKです。
これで、github に作成したリポジトリにローカルのブランチが反映されます。なんて簡単なんでしょう!!!

github で公開してるソースコード

こちらが今回 push したおはようござるbotです。良かったら見てってくださいね。
TAKAyukiatkwsk/ohayougozaru - GitHub

シェアはこちらからどうぞ

このエントリーをはてなブックマークに追加

pitを使ってみたかった

こんにちは。
前回、おはようござるbotなるものを作ってみたのですが、アクセストークンなどの情報をクラス化して他のファイルに保存していました。このままですと、ソースコードを公開するときに自分の token を入れっぱなしなのも嫌だし、かといって password => 'hogehoge' とか 'your password' とか入れておくのもちょっとカッコ悪い・・・。
いい方法がないかなと思っていたら、pitというカッコいいモジュールがあるということを知ったので早速使ってみることにしました。

pitについてはこちらのエントリーを参考にしました。
アカウント情報を管理するコマンド pit - 冬通りに消え行く制服ガールは✖夢物語にリアルを求めない。 - subtech http://subtech.g.hatena.ne.jp/cho45/20080102/1199257680

こんな感じでアクセストークンなどのデータをpitから取得することにしましたよ。
config = Pit.get("twitter_oauth", :require => {
"consumer_key" => "your consumer_key",
"consumer_secret" => "your consumer_secret",
"token" => "your access token",
"secret" => "your access secret"
})
ちなみにpitに設定名が"twitter_oauth"のデータが登録されていない場合は、
スクリプトを実行したときにpitの登録画面が表示されて、そこからユーザーがデータを入力することができます。

設定されてない場合は $EDITOR で設定ファイルを開いて保存し、設定情報が config に入ります。

という説明があります。(via http://subtech.g.hatena.ne.jp/cho45/20080102/1199257680
しかし、実行しても設定ファイルが開かない。。。
# echo $EDITOR
#
あああああ。$EDITORがセットされていないではないか!
~/.bashrc で$EDITOR をセットして、再びスクリプトを実行。

すると、pitの設定画面が表示されました。予め別のファイルに保存していたデータを入力します。
ここでセットした情報は、~/.pit/ の下に hoge.yaml で保存されます。(hogeはプロファイル名)
デフォルトだと ~/.pit/default.yaml に保存されます。

一度pitを設定してしまえば、次回からは default.yaml から consumer key とか token とかを自動的に取得してくれるのです。なんて便利なんだー!

スクリプトはこんな感じになりました。
#!/usr/local/bin/ruby
$:.unshift File.dirname(__FILE__)

require 'rubygems'
require 'twitter_oauth'
require 'pit'

config = Pit.get("twitter_oauth", :require => {
"consumer_key" => "your consumer_key",
"consumer_secret" => "your consumer_secret",
"token" => "your access token",
"secret" => "your access secret"
})

t = TwitterOAuth::Client.new({
:consumer_key => config['consumer_key'],
:consumer_secret => config['consumer_secret'],
:token => config['token'],
:secret => config['secret']
})

if t.authorized?
t.update 'おはようござる!'
else
print '認証に失敗したでござる。'
end

シェアはこちらからどうぞ

このエントリーをはてなブックマークに追加

さくらインターネットのレンタルサーバーでcronからRubyプログラムを実行するときに躓いたのでメモ

こんにちは、こんにちわん!

さくらインターネットのレンタルサーバーでcronからRuby製twitter botを定期実行することができたので、備忘録を付けておきたいと思います。ちょっと躓いた点をつらつら書いていきます。
OSは FreeBSD 7.1-RELEASE-p15 i386 、Rubyのバージョンはruby 1.8.7 です。

コマンドラインからRubyスクリプトを実行できたんだけど、cronからではうまく実行できない罠


おはようござる!とツイートする以下のスクリプトを書きました。
~/wk/ohayougozaru/ohayougozaru.rb
#!/usr/local/bin/ruby

require 'rubygems'
require 'twitter_oauth'
require 'twitteruser.rb'

user = TwitterUser.new()

t = TwitterOAuth::Client.new({
:consumer_key => user.consumer_key,
:consumer_secret => user.consumer_secret,
:token => user.token,
:secret => user.secret
})

p t.authorized?
t.update 'おはようござる!'

twitteruser.rbにはconsumer_keyとかoauth用の設定が書かれています。
コマンドラインから実行するとこんな感じで正常に動作します。
$ ./ohayougozaru.rb
true
#この後「おはようござる!」とツイートされる

がしかし、cronから実行させるとツイートしてくれない。
cron実行後に送られてくるメールを見るとtwitter_oauth gemが無いっていわれています。おかしいなあ。gem list --local するとインストールされているんだけどな。
/usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- twitter_oauth (LoadError) 
from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
from /home/hoge/wk/ohayougozaru/ohayougozaru.rb:4

ごにょごにょ調べていたら、環境変数が違ってるのかなと思い echo $GEM_HOME とか見たんですが、コマンドラインから正常に実行されるんだから間違ってないはず。

ということはcron側でおかしなことが起きているのかなと推測。google先生に聞いてみたらそれっぽい記事を発見!
さくらインターネット設定メモ - i123の日記
http://d.hatena.ne.jp/i123/20080921/1222002928

Rubyスクリプトをcronで実行しようとすると、postmaster宛に下記のメールが届いて実行されない。

test.rb:2:in `require': no such file to load -- rubygems (LoadError)

どうやら、自分でgem を使用してインストールしたものをrequireする場合は、環境変数を設定して

しなければならないらしい。そこで、サーバコントロールパネルの環境変数を設定する。


サーバーコントロールパネルから環境変数を設定するですと・・・!?
つまり、ブラウザからさくらサーバーの設定画面を開いてそこのcronの設定というページで環境変数RUBYLIBとGEM_HOMEを設定すればOK。
(エントリー書いてるとき冷静にログを見たらgemのライブラリが違うところを見ているのを発見。私の設定では、gemは/home/hoge/gems/以下にインストールされてそこを見に行くようにしていたのですが、なんで早く気付かなかったんだろうwww)

とりあえず設定して実行すると、先程とは違うメッセージが。一歩前進?
/home/hoge/gems/lib/rubygems/custom_require.rb:36:in `gem_original_require': no such file to load -- twitteruser.rb (LoadError) 
from /home/hoge/gems/lib/rubygems/custom_require.rb:36:in `require'
from /home/hoge/wk/ohayougozaru/ohayougozaru.rb:5

今度は、メインのスクリプトと同じディレクトリにあるtwitteruser.rbをrequireで呼び出そうとしたけど、そのファイルが無いよって言われています。

この話、最近見た覚えがあるなあ。
Rubyでrbファイルをrequireするときはドットを打つと良さそう - アインシュタインの電話番号☎
http://d.hatena.ne.jp/ruedap/20110531/ruby_require_load_path

こちらのエントリーの解決策2:ロードパスにカレントディレクトリを追加する を行ってみましたよ。
スクリプトはこうなりました。
#!/usr/local/bin/ruby
$:.unshift File.dirname(__FILE__) #この1行を追加

require 'rubygems'
require 'twitter_oauth'
require 'twitteruser.rb'
#(以下略)

これでうまくcronからbotを起動できました。パスが通ってなかったんですね。
cronでスクリプトを実行させるときのカレントディレクトリはユーザーホーム(/home/hoge hogeはユーザー名)なので、ロードパスかホームディレクトリにrequireで呼び出すファイルがなければエラーが起きてしまう。ということなんでしょう。

参考にしました。
組み込み関数 - Rubyリファレンスマニュアル require
http://www.ruby-lang.org/ja/man/html/_C1C8A4DFB9FEA4DFB4D8BFF4.html#require
組み込み関数 - Rubyリファレンスマニュアル $: $LOAD_PATH
http://www.ruby-lang.org/ja/man/html/_C1C8A4DFB9FEA4DFCAD1BFF4.html#a.24.3a

今回はさくらインターネットのレンタルサーバー特有(?)の事象なのかもしれませんが、他のサーバーでも似たような話はあるかもしれないので、頭の隅に入れておこうと思います。
めでたしめでたし。

追記 2011.7.3)
ユーザー情報取得の部分をpitに置き換えてみました。
blogaomu2.1: pitを使ってみたかった http://blogaomu21.blog91.fc2.com/blog-entry-182.html

シェアはこちらからどうぞ

このエントリーをはてなブックマークに追加

[Ruby]TwitterのツイートをRSSから取得してみた

今回はTwitterの自分のツイートと検索結果のツイートを取得するスクリプトを書いてみました。それぞれ、

  • 自分(@TAKAyuki_atkwsk)のツイート:
    http://twitter.com/statuses/user_timeline/77184067.rss
  • 検索結果(例:#musashikosugi) :
    http://search.twitter.com/search.atom?q=%23musashikosugi

で取得することができます。自分のツイートはRSSで検索結果の方はAtomとなっています。

続きを読む

シェアはこちらからどうぞ

このエントリーをはてなブックマークに追加
プロフィール

TAKAyuki_atkwsk

お知らせ
最新記事
最新記事のRSSフィード

最新コメント
最新トラックバック
カテゴリ
タグクラウド
月別アーカイブ
ブクログ
携帯百景