第26回Rails勉強会@東北に参加してきました
https://www.facebook.com/events/153651131446402/
参加してきました。参加者4名。
MongoidのRailsCastsをやってみました。
http://railscasts.com/episodes/238-mongoid-revised
ハマったところを箇条書き。
- MongoidはRuby1.9.3 でしか動かない
- BigDecimalはまともに使えない? Product.let(:price => 100).sizeとかやっても文字列で比較しちゃってる感じだった。
MongoDBとMongoidにどっぷりという感じでした。
参加の皆様お疲れ様でした。
第25回 Rails勉強会@東北参加してきた
https://www.facebook.com/events/342159302538342/
参加者4人。
今回やった内容。
- AngularJS — Superheroic JavaScript MVW Framework
- Backbone-Rails
- Asset Pipelineについて
- mailman
- RailsCastsみながらPolymorphic関連
やった内容の参照先については、こちら。
終了後、懇親会、二次会からSWWDC 2012/8/25 仙台iOS開発者勉強会の懇親会と合流。
久々にid:h_moriさんと話したりして楽しかったです。
参加の皆様お疲れ様でした。
rvm-capistranoを使わずRVM使用のサーバにCapistranoでデプロイする
デプロイ先のRubyがRVMだと、そのままだとRubyをCapistranoが見つけてくれないので、うぐっとなります。
しかし、デプロイする側のローカル環境でもRVMを使っている場合には、rvm-capistranoというgemをインストールして使うと、ちょこっと設定を付け足すだけで、うまいこと処理してくれるようになります。
では、デプロイする側にRVMが入ってなかった場合はどうするのかというと、deploy.rbに:default_environmentを設定してやればOKです。
自分の場合はこのようにしました。
#deploy.rb #remote rvm path set :rvm_base_path, "/home/deploy_user/.rvm" set :rvm_rb_version, "ruby-1.9.3-p194" set :rvm_rb_path, rvm_base_path+"/gems/"+rvm_rb_version set :default_environment, { 'PATH' => "#{rvm_rb_path}/bin:#{rvm_rb_path}@global/bin:#{rvm_base_path}/rubies/#{rvm_rb_version}/bin:$PATH", 'GEM_HOME' => rvm_rb_path, 'GEM_PATH' => "#{rvm_rb_path}:#{rvm_rb_path}@global", 'BUNDLE_PATH' => "#{rvm_rb_path}/bin" }
重複部分を変数にまとめました。
各PATHの実際の値は、デプロイ先のサーバーに、デプロイするユーザーで入って、rvm infoして出てきた値を記述してます。
BUNDLE_PATHはwhich bundleして確認しました。
開発側が、rbenvとRVMをばらばらに使ってたのでこんな話になりました。
Rails勉強会@東北第24回参加してきました
参加者4人。
今回はid:xibbarさんによるDelayed::Jobを使って見るセッションと、私が出したネタのRubyでWebSocketをやり、余った時間は色々雑談してました。
Delayed::Job
皆で、適当なRailsアプリを作って、ActiveRecordのやつを、READMEの通りにやって、Consoleから色々動かしてみました。既存のARの呼び出しにdelayを付け足すだけなので、とてもお手軽。ただし、クラスメソッドとしてしか呼び出せないのでそこだけ注意が必要ですね。
追記:Delayed::Jobで、具体的に何やったかは、参加者のCortYumingさんが書いてるので、ソチラをどうぞ
WebSocket
一式Dropboxに資料を上げてあります。
https://www.dropbox.com/sh/7bdt550fu38c17j/8a6YTEAmk6/rails_tohoku_24
EM-WebSocketのサンプルを色々動かしてみて、そのコードをリーディング、解説。後は並列処理自体の理解を深めるために、実際にコードを書いて動かしてみたという感じです。
参加の皆様お疲れ様でした。
OmniAuthでFacebookにログインすると『#_=_』になるのはなぜか
http://d.hatena.ne.jp/CortYuming/20120623/p1
OmniAuthではなく、FacebookのGraph APIで認証して戻ってきての問題ということだそうで。
http://blog.kyosuke25.com/2012/03/facebookgraph-apijquery-mobile.html
第23回Rails勉強会@東北に参加しました
https://www.facebook.com/events/388412837883749/
今回の参加者は5人。
やった内容
- Rails3レシピブックのレシピ183を見ながら、OmniAuthでFacebookの認証
- twitter bootstrapを便利に使う twitter bootstrap railsを使ってみた
- FacebookのGraph APIを、Graph APIエクスプローラで実際にAPIのresult見ながらみてみた
- FacebookのDialogs APIを使ったFacebookへのお手軽投稿実験
という感じでした。
今回初参加の方がいらっしゃったのですが、id:xibbarさんがサポートに回って、セットアップをフォローして、とりあえずRailsアプリを作れる所まで、Railsの環境作りをサポートされていました。
その間に他の参加者で上記の内容をやってみた感じです。
OmniAuthでのFacebook認証は各種バージョンアップしたりして、既にRails3レシピブックどおりでは動かなかったので、ハマったところ等を補足しておきます。なお、Railsのバージョンは3.2.6です。
補足ではなく、実際の作業手順はこちらを参考にしてください。
http://d.hatena.ne.jp/CortYuming/20120623/p1
Gemfileで以下のコメントを外しておく
# gem 'therubyracer', :platform => :ruby
Gemfileにomniauthだけでなくomniauth-facebookも記述しておく*1。
gem 'omniauth' gem 'omniauth-facebook'
追加しておかないとuserモデルを作成しようとするときにこんなエラーが出ます。
`rescue in provider': Could not find matching strategy for :facebook. You may need to install an additional gem (such as omniauth-facebook). (LoadError)
Userモデルでユーザーデータを追加するメソッドを記述する所でuser_infoとなっているのですが、infoに修正する必要があります。
Class User < ActiveRecord::Base def self.create_with_omniauth(auth) create! do |user| user.provider = auth["provider"] user.uid = auth["uid"] #user.name = auth["user_info"]["name"] user.name = auth["info"]["name"] #Twitter用なのでなくてもいい #user.screen_name = auth["user_info"]["nickname"] user.screen_name = auth["info"]["nickname"] end end end
SessionsControllerのredirect_toの部分でsintax errorになるので、encodingをきちんと指定してあげるとか日本語の使用をやめる、あるいはちゃんと国際化する必要があります。
# encoding: utf-8 とか class SessionsController < ApplicationController def callback auth = request.env["omniauth.auth"] user = User.find_by_provider_and_uid(auth["provider"], auth["uid"]) || User.create_with_omniauth(auth) session[:user_id] = user.id redirect_to root_url,:notice => "ログインしました" end def destroy session[:user_id] = nil redirect_to root_url,:notice => "ログアウトしました" end end
とりあえずこんな所だったと思います。
あ、あとレシピブックやRailsまわりの問題ではないですが、登録したアプリの設定で、Website with Facebook Loginの所にlocalhost:3000を記入してやらないとcallbackを受け取れないので注意が必要です。
twitter bootstrap railsはこちらを参考にしましたが、さらっと導入するところまでで、cssいじったりまでしてないので、公式で十分だったと思います。
Dialogsは、OmniAuthでFacebookの認証を試してみたサンプルアプリのviewに、link_toを追加するだけのお手軽な感じで試してみました。
<%= link_to("feed dialog","https://www.facebook.com/dialog/feed?app_id=APP_ID&redirect_uri=http://localhost:3000/") %>
今回はこんなかんじで。
参加の皆様お疲れ様でした。