第一回Kakyoin.rb

8月9日 14時から、Kakyoin.rbの一回目のMeetupを片平堂で行います。

内容は、特に決めておらず、集まった人たちでRubyに関する何かをやります。

なお、参加希望は受け付けていません。

事前に声がけした近隣のRubyistの皆様で一杯になってしまったので。

片平堂の事務所は狭いので、6人ぐらいも入ると場所的に限界です。

じゃあ、なんでブログに書いたかといいますと、需要があるのか知りたいなと。

参加希望の需要があるのかとか。

後、会場貸せるよとか、この場所いいよなんて情報が寄せらたりしないかと。

何らかの反応を送りたいという方は、Twitterなりこのブログなり何らかの手段で片平に送りつけてください。

そんな感じで。

AngularJSの$httpや$resourceでのリクエストにAuthorizationヘッダーでの認証を付加する

個別のリクエストではなくインターセプターを使ってまとめて追加。 インターセプターを作って$httpProvider.interceptors配列に追加するだけ。 下記コードは、サーバからのtokenを取得済みなら、Authorizationヘッダーに追加してリクエストするようになる例。

#auth_interceptor.coffee
"use strict"

angular.module("myApp")
.factory("AuthInterceptor", (AuthToken)->
  "request": (config) ->
    config.headers ?=  {}
    if AuthToken.isToken()
      #Authorizationへの記述形式は、サーバの認証方式による。例:Token token="abcdefg...."
      config.headers.Authorization = AuthToken.getTokenString()
    config
).config ($httpProvider)->
  $httpProvider.interceptors.push("AuthInterceptor")

One-time bindingと$resourceで気をつけること

前提

AngularJS1.3からOne-time bindingという最初の一回だけバインディングする仕組みが入った。 $resourceはpromiseではなく、先に空配列を返す。

問題

なので、下記のようにngRepeatをOne-time bindingにすると、空配列評価されて、何も表示されなくなったりする。 あ、下のindex()はquery()と読み替えて問題なし。

#sample.coffee
angular.module("myApp")
.controller "SampleCtrl", ($scope, Group) ->
  $scope.groups = Group.index()
<!--index.html-->
<div  ng-repeat="group in ::groups">
{{::group.name}}
</div>

解決

プロミスで処理しよう。 個人的には$resourceは出来るだけpromiseにしたほうがいいと思う。

#sample.coffee
angular.module("myApp")
.controller "SampleCtrl", ($scope, Group) ->
  Group.index().$promise.then((groups)->
    $scope.groups = groups
  )

OS X YosemiteにアップデートしたらHomebrewでインストールして自動起動設定にしていたnginxのサイトにアクセスできなくなった

こういう設定で家庭内で食材検索のWebアプリを動かしていたが、動作させていたMac miniYosemiteにアップデートしたらアプリのサイトにアクセスできなくなってしまった。

で、調べようとする過程でbrew doctorしようとしたらbrewコマンドも使えなくなってた。

$ brew doctor
/usr/local/bin/brew: /usr/local/Library/brew.rb: /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby: bad interpreter: No such file or directory
/usr/local/bin/brew: line 26: /usr/local/Library/brew.rb: Undefined error: 0

ので、まずこちらを解決する。

Yosemiteの/System/Library/Frameworks/Ruby.framework/Versionsの下はCurrent と 2.0になっていて、Currentは2.0のシンボリックリンクになっている。  

brew.rbを編集。

$ vi /usr/local/Library/brew.rb
#!/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby -W0 <- これを
#!/System/Library/Frameworks/Ruby.framework/Versions/Current/usr/bin/ruby -W0 <-こう変える

これでbrew updateとかdoctorとかしようとすると当然怒られるので以下のように。

$ cd /user/local
$ git commit -a -m "ruby version 2.0" 
$ brew update

OK.

本題のnginxとunicornの確認。 まず、unicornのポート5000番にブラウザからアクセスしてみると、こちらはアクセス出来ている。

nginxがダメなようだ。

plistをunloadしてnginxを手動で起動して確認してみる。

$ launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.nginx.plist
$ nginx
nginx: [warn] the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /usr/local/etc/nginx/nginx.conf:2
nginx: [emerg] mkdir() "/usr/local/var/run/nginx/client_body_temp" failed (2: No such file or directory)

ディレクトリ作成に失敗というメッセージが出たので、手動で作ってみた

$ mkdir -p /usr/local/var/run/nginx/client_body_temp
$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.nginx.plist

OK.ブラウザから8080番にアクセスしたところ無事アクセス出来た。

参考