第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にどっぷりという感じでした。
参加の皆様お疲れ様でした。

9/19朝活告知


毎週水曜日、ラビックスさんで、xibbarさんが開催している朝活ですが、9月19日は片平堂にて開催します。


朝7:45-9:00の時間で各々作業をするという活動です。

 
Ruby以外のことを作業したい人も歓迎です。
よろしくお願いします。

 
日時:9月19日(水)7:45〜9:00
場所:片平堂

第25回 Rails勉強会@東北参加してきた

https://www.facebook.com/events/342159302538342/

参加者4人。

今回やった内容。

やった内容の参照先については、こちら

終了後、懇親会、二次会からSWWDC 2012/8/25 仙台iOS開発者勉強会の懇親会と合流。

久々にid:h_moriさんと話したりして楽しかったです。
参加の皆様お疲れ様でした。

rvm-capistranoを使わずRVM使用のサーバにCapistranoでデプロイする

デプロイ先のRubyがRVMだと、そのままだとRubyCapistranoが見つけてくれないので、うぐっとなります。

しかし、デプロイする側のローカル環境でも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人。

やった内容

という感じでした。


今回初参加の方がいらっしゃったのですが、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/") %>


今回はこんなかんじで。
参加の皆様お疲れ様でした。

*1:Twitterもならomniauth-twitter