そういうことだったんですね

いろいろ調べたり学んだりしたことを忘れないように書き連ねています

chef - git レポジトリを扱う


最近のアプリケーションは git clone してパスを設定するだけ、
というものも増えてますが、chefにも git リソースがあります。

git のリモートリポジトリと同期をとり、更新を検出してくれる
点で execute リソースより優れています。

git "/home/hogehoge/somehoge" do
  repository "https://github.com/deratame/somehoge.git"
  revision "master"
  user "hogehoge"
  group "hogehoge"
  action :sync
end

actionについてですが、
:syncは、ローカルリポジトリが存在しなければclone、それ以外は更新
:checkoutは、ローカルリポジトリが存在しない場合のみcloneを行い、それ以外は何もしない
:exportは、そのまんまexport
です

revision(reference)で、ブランチを指定します。未指定の場合は HEAD です。

notifies と組み合わせれば、更新した場合にコマンドを実行させることができます。

git "/home/hogehoge/somehoge" do
  repository "https://github.com/deratame/somehoge.git"
  revision "master"
  notifies :run, "execute[command]"
end

execute "commend" do
  cwd "/home/hogehoge/somehoge"
  command <<-EOF
  ./refresh.sh
  EOF
  action :nothing
end

なお、デプロイを行うには git ではなく deployリソースがあります。
deployリソースを使うと、webアプリケーションのデプロイの流れ、
checkout して、DBをマイグレーションし、シンボリックリンクを張り替え、再起動するという制御ができます。

chef - knife solo を使う

chef-solo を簡単に使うには knife solo を使います。
chef-serverを使わなくてもリモート実行できるので楽に一元管理できます。

前提

以下の準備が必要です。

  • ssh でリモートアクセスできること (パスフレーズ無が好ましい)
  • sudo でroot権限になれること
インストール

今回 chef はすでにインストール済みとします。

knife-solo を gem でインストールします。

$ gem install knife-solo

Berkshelf または Librarian-Chef を使うとよいとのことで、
今回は前者をインストールします。

$ gem install berkshelf

rbenv を使っている場合は、rehashしておきましょう。

$ rbenv rehash
kitchenの作成

kitchen(cookbookのリポジトリをおく場所)を初期化します。
設定ファイルやディレクトリツリーが作成されます。

今回は chef-repo というkitchenを作成します。

$ knife solo init chef-repo

以下のようなディレクトリとファイルが作成されます。

chef-repo/
-cookbooks
-data_bags
-environments
-nodes
-roles
-site-cookbooks
-.chef/knife.rb

以下は、chef-repo ディレクトリで実行します。

レシピの作成

chef-solo のときと同じように、knife cookbook で作成します。
site-cookbooks 以下に作成します

$ knife cookbook create mysql -o site-cookbooks
run_list の作成

chef-solo のときに-jオプションで指定したJSONファイルを、
nodes/ 以下に作成します。

knife node コマンドで作成すると便利です。

$ knife node create localhost -z -e vim

ノード名として実行するホスト名を入力します。
-e でエディタを指定します。(上記ではvimを指定)
run_list に、実行したいレシピのリストを追加します。

{
  "run_list": [
     "recipe[mysql]"
  ]
}

保存すると nodes/localhost.json (localhostは引数で指定したノード名) に
出力されます。

実行する

knife solo cook コマンドで実行します

$ knife solo cook bibio@localhost --no-chef-check  

bibio は対象ホストのユーザ名、localhostは対象ホスト名を指定します。

--no-chef-check は、chefのバージョンチェックをスキップします。
Chef(Opscode)のrpmを使用しない場合エラーとなるので追加しています。

途中何回かパスワードとパスフレーズの入力が求められます。
パスフレーズは無い方が楽なのはこのためです。

テスト実行は -W オプションを指定します。

$ knife solo cook bibio@localhost --no-chef-check -W 

rails - 便利なコマンド

ルーティングを表示する

rake routes で、HTTPのメソッド名・パスとコントローラ・アクションの対応テーブル
を出力できる。

$ rake route
           Prefix Verb   URI Pattern                                 Controller#Action
    welcome_index GET    /welcome/index(.:format)                    welcome#index
            posts GET    /posts(.:format)                            posts#index
                  POST   /posts(.:format)                            posts#create
         new_post GET    /posts/new(.:format)                        posts#new
        edit_post GET    /posts/:id/edit(.:format)                   posts#edit
             post GET    /posts/:id(.:format)                        posts#show
                  PATCH  /posts/:id(.:format)                        posts#update
                  PUT    /posts/:id(.:format)                        posts#update
                  DELETE /posts/:id(.:format)                        posts#destroy
             root GET    /                                           welcome#index

ドキュメントを作成する

rake doc:guides で rails guide を doc/guides 以下に作成できる。

redcarpet
nokogiri

が必要。

$ vim Gemfile
group :doc do
  # bundle exec rake doc:rails generates the API under doc/api.
  gem 'sdoc', require: false
  gem 'redcarpet', '~> 2.1.1' ←追加
  gem 'nokogiri' ←追加
end
$ bundle update
$ rake doc:guides

rake doc:railsAPIリファレンス を doc/api 以下に作成できる。

$ rake doc:rails

RailsによるアジャイルWebアプリケーション開発 第4版

RailsによるアジャイルWebアプリケーション開発 第4版