外部サーバーからローカルへリダイレクトさせる方法
「Developing Facebook Platform Applications with Rails」に掲載されている事例を参考にしながら、気づいた点を随時メモしていきたいと思います。
ローカルマシンでFacebookアプリをRailsで構築して、それをFacebook上で動かすためには、ローカルマシンをInternetに接続する必要がある(FacebookからのCallbackRequestを受け取る必要ある)のですが、それができない場合は、sshを使ってInternetにつなげるサーバーにローカルから接続して、そのサーバーにローカルとFacebookを中継させます。例えば、InternetにつなげるサーバーとしてAmazonEC2を選んだ場合、以下のようにローカルから実行すると、
ssh app@ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com -R :3001:localhost:3000 sleep 99999
FacebookからEC2の3001ポートへCallbackされれば、それがローカルの3000ポートへリダイレクトされるようです。
- 上記を実行する前に、appユーザーのパスワードを指定しておく(passwd app)
- EC2のインスタンスを起動する時に、ポート3001を開放しておく
- Facebook側の設定箇所もけっこうたくさんある(それぞれの役割については調査中)
- Canvas Callback URL
- Post-Remove URL
- Post-Authorize URL
- それぞれのCallback URLには、「http://ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com:3001」のように記入
その他、FacebookerをRailsアプリケーションにインストールすると、
script/plugin install git://github.com/mmangino/facebooker.git
config/facebooker.ymlというファイルが生成されるので、そこにFacebook側の情報(API KeyやSecret)を記入する必要があります。また、tunnelにEC2のホスト名や開放しているポートを記入します。
development: api_key: <<api_key>> secret_key: <<secret_key>> canvas_page_name: <<canvas_path>> callback_url: http://ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com:3001 pretty_errors: true set_asset_host_to_callback_url: true tunnel: public_host_username: app public_host: ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com public_port: 3001 local_port: 3000 server_alive_interval: 0
これで、ローカルでscript/serverを実行して、http://apps.facebook.com/<
- 次回までのTODO
- Railsの仕組みそのものの勉強
- 特に、config/routes.rb