Facebookアプリからアルバムに投稿する方法。
通常のwall postと違って目立つので、アルバムに投げるのが流行ってたりする。
ちなみにpermissionはpublish_streamでOK。

FBGraphにはアルバムに投げるメソッドがあるようだけど、RestGraphにはないため自分で実装しなければならない。
既にやってる人がいるので真似させてもらった。以下のURL参照。

http://forrst.com/posts/post_a_photo_to_the_fb_graph_api_with_ruby-CSa

multipart-postとmyme-typesのgemが必要。
なお、URLを投げても拾ってくれないので、動的に生成される画像についてはローカルにいったん保存してアップロードする必要がある。

Rails3.1.1のプロダクトをRails3.1.3にアップグレードした時のメモ。

1.Gemfileを書き換える

gem 'rails', '3.1.3'
gem 'rack' , '1.3.5'

しかしrackの最新が幾つなのか分かりにくいな。gem outdatedで出てこないから1.3.5で合ってるんだろうけど。

2.bundle update rails
bundle updateだけだと本体はアップデートされない。

必要なのはここまで。以下は必要なら。

3.rake rails:update
config以下の変更を自動的にやってくれるけど、大抵の場合必要ないと言うか、マイナーアップデートなら手でやった方がいいと思う。

4.rake doc:rails
APIドキュメント生成。いらなければ別に。

 

Agile Web Development with Rails第4版の翻訳がやっと出ますね。楽しみ。

Railsで非同期実行する際の定番、delayed_job
ドキュメントが今一分かりにくかったりforkされまくっててどれがオリジナルか分からなかったりするので、メモしておく。

起動・終了・再起動

bundle exec script/delayed_job start   # 起動
bundle exec script/delayed_job stop    # 終了
bundle exec script/delayed_job restart # 再起動

restartはプロセスが無いと起動してくれないので、stop→startの方が無難。

capistranoのレシピ

namespace :delayed_job do
  desc "Start delayed_job process"
  task :start, :roles => :job do
    run "cd #{current_path}; RAILS_ENV=#{stage} bundle exec script/delayed_job start"
  end

  desc "Stop delayed_job process"
    task :stop, :roles => :job do
    run "cd #{current_path}; RAILS_ENV=#{stage} bundle exec script/delayed_job stop"
  end
 
  desc "Restart delayed_job process"
    task :restart, :roles => :job do
    run "cd #{current_path}; RAILS_ENV=#{stage} bundle exec script/delayed_job restart"
  end
end

roleはお好みで。appとかやると全サーバで動き始めるのでお勧めしない。

遅延実行

job = Job.new
job.delay.execute

非同期で実行。デフォルトだと5分おき?にリトライされる。

時刻指定実行

job = Job.new
job.send_at Time.zone.now.tomorrow :execute

これくらいで十分ではないかと。
rails runnerで実行してるバッチもdelayed_jobにしたいんだけど(runnerだとRailsのプロセスが丸々一個上がるのでリソースの無駄)、いい方法ないかな。

RestGraphを使ってFacebookアプリを書いていて、ドキュメントを参考にしつつ

rest_graph_setup(:app_id => API_ID,
:secret => API_SECRET,
:canvas => CANVAS_NAME,
:auto_authorize => true,
:auto_authorize_scope => 'publish_stream',
:auto_authorize_options => {},
:ensure_authorized => true,
:write_session => true,
:write_cookies => true,
:write_handler => nil,
:check_handler => nil,
:auto_decode => true,
)

とか初期設定しているんだけど、これだとスマートフォン版Facebook(アプリ、ブラウザ共に)で開くと延々とリダイレクトループになってOAUTHが通らない。

More »

ロードバランサを置いている時、バックエンドのアプリケーションサーバはなるべくタイトな構成にしたくなるのが人情というもの。
ところが、unicornだけ走らせているはずのアプリケーションサーバに比べて、フロントエンドのhttpd(nginx)が走っているテスト用サーバの方が何倍も早いという現象が発生した。
条件を色々変えて確かめた結果、意外な結果になった。

とりあえず結論から書くと、unicornだけを走らせてLBから直接叩くのに比べて、間にhttpd(nginx)を挟んだ方が何倍も速い。

More »

震災後くらいからいじり初めて、Rails3の案件を一つやって、今はRails3.1の案件が進行中。

何と言ってもArel最高。Perl/DBIの頃作ろうとしてうまくできなかったものが実現されている感じ。
オブジェクト志向にどっぷり浸かっている時にSQLで突然手続き志向に戻されるのが嫌だったんだよね。
極力SQL書かないようにしてやってるけど、NOT INとか!=とか否定が入るとどうしてもSQLの断片を書かなくちゃならないのが不満ではあります。

More »

ちょっと仕事でデザイナーに使って貰うアプリを書く必要が生じたので、昔ちょっと試したきりのHerokuを使ってみた。
ステージング程度なら自鯖で動かせるので、今まであんま触れる必要がなかったんだよね。まぁ職場に自鯖を知られたくないので仕事に不安定な自鯖はよろしくないので。
なお、小さなアプリなのでフレームワークはsinatraを利用した。

More »

rails-modeは使ってない(rinari派)ので入れてなかったんだけど、ふと思い直してrspec-modeを入れてみたら便利すぎた。
describeとかitにカーソルを持って行ってC-c , s とやるだけでそのエクスペクテーションが実行される。
今までターミナルに移っていちいちspec -lineとかやってたのが馬鹿みたいだ。
ただし、デフォルトだとrake specが走るので、

(require 'rspec-mode)
(custom-set-variables '(rspec-use-rake-flag nil))

とやって無効にしておくと良い。

26. 1月 2011 · Write a comment · Categories: Ruby

先日の記事のように、何もオプションを付けずにrvm install ruby-1.8.7とかやるとopensslやreadlineなしでインストールされてしまう。
このへんのライブラリが入ってないと動かないgemが出てくるので、改めて入れ直した。
rvm package install opensslとか個々に指定してもいいけど、rvmが用意するパッケージを全部入れるにはRuby Enterprise Edition向けのオプションを利用すると楽。

rvm remove ruby-1.8.7
rvm package install ree_dependencies
rvm install 1.8.7 -C --with-readline-dir=$rvm_path/usr --with-iconv-dir=$rvm_path/usr --with-zlib-dir=$rvm_path/usr --with-openssl-dir=$rvm_path/usr

Linuxならlibreadline-devあたりのパッケージを入れておいた方が安全かも。
gemは入れ直さないでも大丈夫でした。