Rails アプリの開発環境を Vagrant + Chef で構築していて、 PostgreSQL のインストールでつまづいたのでメモ。
まず Berkshelf で postgresql のクックブックをダウンロード。
echo cookbook "postgresql" >> Berksfile berks vendor cookbooks
postgresql クックブックはそのまま使うと、どうしてもエンコーディングに UTF-8 を指定してデータベースを作成できなかった。 対策として、postgresql をインポートするクックブックを新規作成する。
knife cookbook create postgresql_server_utf8
デフォルトのレシピを記述。
ENV["LANGUAGE"] = ENV["LANG"] = ENV["LC_ALL"] = "en_US.UTF-8" include_recipe "postgresql::server"
環境変数をセットしているのがポイント。
あとは Vagrantfile に
VAGRANTFILE_API_VERSION = "2" Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.box = "hashicorp/precise64" config.vm.provision "chef_solo" do |chef| chef.cookbooks_path = ["./chef/cookbooks", "./chef/site-cookbooks"] chef.add_recipe "postgresql_server_utf8" chef.json = { "postgresql" => { "password" => { "postgres" => "postgres" }, "initdb_locale" => "en_US.UTF-8", "config" => { "lc_messages" => "en_US.UTF-8", "lc_monetary" => "en_US.UTF-8", "lc_numeric" => "en_US.UTF-8", "lc_time" => "en_US.UTF-8" } } } end end
を書いて、vagrant up/provision を実行すれば、 PostgreSQL をインストールできた。 エンコーディングに UTF-8 を指定してデータベースを作成できるようにもなった。