ngrok: localhostにドメインを割り当てる

ローカルで開発しているWebサービスに、どうしても外部サービスからアクセスさせたい時がある。例えばtwitterやfacebookで共有した時にどのような見た目になるか、を検証する時などはhttp://localhost:3000/を共有するわけにもいかない。

そんな時はngrokを使うと、超便利。ngrokをインストールしたら、以下のようにするだけでhttpアクセスを3000番ポートに飛ばすプロキシサーバーが生成される。

$ ngrok http 3000
ngrok by @inconshreveable                                                                                      (Ctrl+C to quit)

Tunnel Status                 online
Version                       2.0.19/2.0.19
Web Interface                 http://127.0.0.1:4040
Forwarding                    http://7c7*****.ngrok.io -> localhost:3000
Forwarding                    https://7c7*****.ngrok.io -> localhost:3000

Connections                   ttl     opn     rt1     rt5     p50     p90
                              0       0       0.00    0.00    0.00    0.00

超便利!!

日本一熱い男のSlack用botを作った

SlackとHubotの勉強と練習のために、日本で一番熱い男のSlack用のhubotを作りました。

https://github.com/akiroom/shubot

追記

npmライブラリ化しました。npm installするか、

$ npm install hubot-shubot

もしくはexternal-scripts.jsonに以下を追加することで簡単に利用できます。

["hubot-shubot"]

続きを読む 日本一熱い男のSlack用botを作った

shenzenでdeploygateにアップロードするとタイムアウトする

TravisCIで自動で社内にiOSアプリを配信したい時、nomad-clishenzenを使ってCLIでdeploygateにアップロードすると便利だと以前書いた

ipa distribute:deploygate --api_token 00000000000000000 --user_name hoge_fuga --message 'YourMessage'

ただ、いつの間にか以下のメッセージが出てアップロードできなくなってしまった。

Timed out while uploading build. Check https://deploygate.com/ to see if the upload was completed.

色々試したんだけどshenzenを使うのが面倒になってきたので、公式サイトのDeploygate API/Push APIのドキュメントに書いてある方法でアップロードした。

curl -F "file=@AppName.apk" -F "token=00000000000000000" -F "message=YourMessage" https://deploygate.com/api/users/hoge_fuga/apps

TravisCIでiOSアプリのipaファイルを作って実機に配信する時に便利だったもの

TravisCIを使ってCI(継続的インテグレーション)の環境を構築しようとしたけれど、ググっても手順がやや複雑で環境構築が大変そうに見えた。色々自動化できないか探してみると、iOS開発に大変便利なツール群が見つかった。それらを使って環境構築すると、イイ感じに構築できたのでメモ。

続きを読む TravisCIでiOSアプリのipaファイルを作って実機に配信する時に便利だったもの

TravisCIでObjective-Cの時にCocoapodsのバージョンが違うとコンパイルが通らない件

Travis CIを使ってObjective-Cのプロジェクトをコンパイルする時、TravisCI側のCocoapodsのバージョンが0.34.0なんだけどプロジェクトのCocoapodsは0.35.0でコンパイルに失敗していたので、いい感じにできるようにしておいた。ついでに、諸々の処理をRakefileに書き出した。

続きを読む TravisCIでObjective-Cの時にCocoapodsのバージョンが違うとコンパイルが通らない件

nokogiri がlibxml2のせいでインストールできない

Mac OS X Mavericksで”gem i nokogiri”失敗の解決方法 – Qiita
http://qiita.com/t_732_twit/items/a7956a170b1694f7ffc2

上のリンク先を参考にnokogiriをインストールしようとしたものの、文中のgem install nokogiri -- --use-system-libraries --with-iconv-dir="$(brew --prefix libiconv)" --with-xml2-config="$(brew --prefix libxml2)/bin/xml2-config" --with-xslt-config="$(brew --prefix libxslt)/bin/xslt-config"を実行するタイミングでlibxml2 version 2.6.21 or later is required!というエラーが表示されてしまってnokogiriがインストールできなかった。

続きを読む nokogiri がlibxml2のせいでインストールできない

Rails: Doorkeeperでのログイン処理中に起きたエラーをJSONで出力

Doorkeeperでログイン中にエラーが発生すると、Doorkeeper::TokensControllerの中でエラーが起きるので、ApplicationController < ActionController::Baseの中でrescue_fromを書いてもうまくハンドリングできなかった。これをrescueするための方法。エッセンスは以下の通り。

  • use_doorkeeperの中でdoorkeeperの処理に使うcontrollerを指定できる
  • Doorkeeper::TokensControllerはActionController::Metalを継承しているので、renderを実行するのに必要なmoduleをincludeする必要がある

/config/routes.rb

MyAppServer::Application.routes.draw do
  use_doorkeeper do
    controllers tokens: 'tokens'
  end

  resources :books
  resources :users
end

/app/controllers/tokens_controller.rb

class TokensController < Doorkeeper::TokensController
  include ActionController::Rescue
  include ActionController::Rendering
  include ActionController::Renderers::All

  rescue_from Exception do |e|
    render json: {error: 'something occurred.'}
  end
end

Capistranoでdeployすると”fatal: Could not parse object”と出る

Capistranoで、新しく作ったブランチをデプロイしようとしたらエラーが起きた。例えば以下のような感じ。

$ cap staging deploy -s branch=mybranch
    triggering load callbacks
  * 2013-04-25 11:51:27 executing `staging'
    (中略)
    [my-deploy-server.example.com] executing command
 ** [my-deploy-server.example.com :: out] fatal: Could not parse object '4n58rzpt8w4iuvzdau5hylb82gsxxvg7hhcjyucc'.
    command finished in 7935ms

“fatal: Could not parse object”の行は赤字で表示される。この問題の原因は、Capistrano側で設定されているgitのリポジトリに引数で指定されたブランチが存在していないことだった。自分の場合は、ローカルでちゃんと$ git push origin mybranchを実行してから再度cap deployを実行することで、問題が解決した。