rails + jenkinsでgithubにpushしたらテストというところまでは下記を参照してください。

ウェブオペレーション継続的デプロイというキャッチーな単語を知ったので試してみた。

kowabana Config [Jenkins]

継続的デプロイなんつっても、上記の様にいつものテストにcapのタスクを追加するだけ。簡単。

kowabana [Jenkins]

githubにpushされると勝手にjenkinsが動き出して…

怖話 | スマホで怖い話

ステージング環境にデプロイ。

これでデザイナーの@machidaさんがgit pushした時も勝手にステージング環境が最新になる。デザインが変わっただけでも頻繁にデプロイされるので問題点などが議論し易い。(特にスマホサイトは実機からアクセス出来る環境があると便利。)

最近はデザイナーも簡単にGithubが使える環境が揃ってきたので、テスト・開発・チェックイン・デプロイというサイクルにデザイナーが入る良いタイミングかも。

デザイナーのためのGithub for Mac の使い方「リポジトリ作成編」 - KUROIGAMEN(黒い画面)

% rake
`include Capybara` is deprecated please use `include Capybara::DSL` instead.

include Capybaraがdeprecatedになってたので指示通り書き換えました。

# test/test_helper.rb:
class ActiveSupport::TestCase  
  (...)
  class ActionDispatch::IntegrationTest 
    include Capybara::DSL      
    Capybara.app = KowabanaJp::Application
  end
end

Unit::TestとCapybaraでのIntegrationTestは簡単なのにちゃんと動く(バグを見つけたりデグレを防ぐ役割をちゃんと果たすという意味で)のでお気に入りです。

Paperclipで画像サイズの最後に使うコレ

has_attached_file :foo, :style => {:thumb => '100x80>'}

いつも意味忘れてググるけどImageMagickのオプションなので下記に書いてある。

Resize or Scaling -- IM v6 Examples

  • Ignore Aspect Ratio ('!')
  • Only Shrink Larger ('>')
  • Only Enlarge Smaller ('<')
  • Fill Given Area ('^')
  • Percentage Resize ('%')
  • Pixel Area Limit ('@')
  • Cropping ('#')

参照:[rails]PaperClipでクロッピング - func09

まだ空きがあるはず!今日はTokyo PayPal Developers Groupのイベントですよ!

PayPal Express Checkout, Subscriptions - Tokyo PayPal Developers Group

セレゴ・ジャパン様がミーティングルームとプロジェクターを貸してくださいました。場所は渋谷駅の北川、セルリアンタワーから歩いて2分ほどです。地図:http://www.cerego.com/en/contact-us/

開場は19:30から、発表の開始は20:00頃です。イベント終了後、おそらく近くのお店で懇親会が行われます。

paypal-express@novさんのお話も絶対聞きたいし、@mreinschさんが作った、簡単にPayPalの定期支払いが出来るRailsプラグインのsubscription_fuも超注目なのです。

っていうか、今やってる仕事のプロジェクトでもsubscription_fu使うので行かなければならないのです。そしてsubscription_fuの低レイヤー部分はpaypal-expressに置き換えられる予定なので両方必聴なのです。

# Gemfile:
group :development
  gem 'haml-rails'
end

真面目なサイトを作る時になんでSlimじゃなくてHamlかっていうと、ちょこちょこバグがあるからです・・・。

# Gemfile:
group :development do
  gem 'erb2haml'
end
% rake haml:convert_erbs
Looking for ERB files to convert to Haml...
Converting: app/views/layouts/application.html.erb... Done!
Converting: app/views/devise/unlocks/new.html.erb... Done!
Converting: app/views/devise/sessions/new.html.erb... Done!
Converting: app/views/devise/registrations/new.html.erb... Done!
Converting: app/views/devise/registrations/edit.html.erb... Done!
Converting: app/views/devise/passwords/new.html.erb... Done!
Converting: app/views/devise/passwords/edit.html.erb... Done!
Converting: app/views/devise/mailer/unlock_instructions.html.erb... Done!
Converting: app/views/devise/mailer/reset_password_instructions.html.erb... Done!
Converting: app/views/devise/mailer/confirmation_instructions.html.erb... Done!
Converting: app/views/devise/confirmations/new.html.erb... Done!

deviseのhaml/slim対応は本体から消えたっぽいのでこっちがいいかも。application.html.erbも変換してくれるし。

# config/application.rb:
module Foo
  class Application < Rails::Application
    config.autoload_paths += %W(#{config.root}/lib)
  end
end

gemにmoneky patch当てないでcloneしてgem 'foo', :git => 'git://foo'しようというのをどっかでみたけどslim-railsで

Deprecated: Use `require 'slim'` instead of `require 'slim/rails'`

が出るのは放置してたらcloneしてる人がいた。pull requestが送られてから2週間たってるけどマージされる気配が無いのでcloneした方を使う。

# Gemfile:
gem 'slim-rails', :git => 'git://github.com/stjernstrom/slim-rails.git'

もっと面倒なのかと思ってたけど簡単。さっさと自分でやればよかったな。

Test::Unit + Capybaraによる自動テスト。

Test::UnitはRailsデフォルトだけあってサポートが行き届いていて簡単。

JenkinsでRailsアプリをテストする。

環境

Jenkinsのインストール

さくらのVPSにDebian squeezeをインストールする方法はこちら

$ wget -q -O - http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key | sudo apt-key add -
$ sudo vi /etc/apt/sources.list
deb http://pkg.jenkins-ci.org/debian binary
$ sudo apt-get update
$ sudo apt-get install jenkins

jenkinsユーザーが作成されて8080にjenkinsが立ち上がる。

nginxでのReverse proxyの設定

example.com:8080では味気無いのでci.example.comでアクセス出来るようにする。

$ sudo apt-get install nginx
$ sudo vi /etc/nginx/sites-available/ci.example.com
server {
  listen 80;
  server_name ci.example.com;
  location / { proxy_pass http://localhost:8080; }
}
$ ln -s /etc/nginx/sites-available/ci.example.com /etc/nginx/sites-enable/ci.example.com

rvmのインストール

rvmをsystem wideにインストールするのは大変なので単にjenkinsユーザーにインストールする。

$ sudo su - jenkins
$ bash < <( curl http://rvm.beginrescueend.com/releases/rvm-install-head )

大体nokogiriを使う段になって困るので下記をちゃんとインストールしておく。

$ rvm package install readline openssl zlib
$ rvm install 1.8.7 -C --with-openssl-dir=$HOME/.rvm/usr --with-readline-dir=$HOME/.rvm/usr --with-zlib-dir=$HOME/.rvm/usr

アプリ名でgemsetを作っておき、bundlerをインストールしておく。(jenkinsのタスクでやっても構わないと思う)

$ rvm use ruby-1.8.7-p334
$ rvm gemset create rails-example-app
$ rvm use ruby-1.8.7-p334@rails-example-app
$ gem install bundler

ユーザー認証

LAN内でない場合はユーザー認証をかける。"Manage Jenkins"の"Access Control"で"Secure Realm"を"Jenkins's own user database"にして"Allow users to sign up"にチェックを入れる。"Authorization"は"Matrix-based security"を選び、管理者ユーザーとなる予定のユーザー名を追加しておく。少し分かりづらいがここで設定した後、同じ名前でsign upをすれば良い。(間違って管理画面にはいれなくなってしまった場合はここを参考にしてリセットする。)

Configure System [Jenkins]

gitプラグインのインストール

大体が社内のgitやgithubから持ってくることになるのでgitプラグインをインストールする。"Manage Jenkins" > "Plugin Manager" > "Available"から"Git Plugin"を選択してインストールする。"Github Plugin"もついでに入れておくと良いかもしれない。

ビルドの設定

"Source Code Management"から"Git"を選択し、"Repositories" > "URL of repository"にリポジトリのURLを入れる。(githubのプライベートリポジトリを使っている場合はjenkinsユーザーで鍵を作り、githubの"Admin" > "Deploy Keys"から登録しておけばいい。)ビルドトリガーは好きに設定する。右側の"?"に親切な説明があるので迷わないだろう。ビルドはrailsなので"Execute shell"を選択する。rvmにはrvm-shellという指定の環境でshellを実行するうってつけのコマンドがあるのでそれをshebangに設定すればいい。

u2plus Config [Jenkins]

"Post-build Actions"で"E-mail Notification"を設定しておく。Debianデフォルトのexim4はメールが飛ぶようになってないのでいっそのことpostfixを入れた方が楽。

$ sudo apt-get install postfix

関連:Debian Squeeze install to Sakura VPS - komagata