Rails 開発環境を構築するために Chef を使って PostgreSQL をインストールするメモ

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 を指定してデータベースを作成できるようにもなった。

博多 一双

久しぶりにラーメン屋を新規開拓したくなったので、博多まで足を伸ばしてみた。 ターゲットは博多駅筑紫口から徒歩6分のところにある『博多 一双』。

f:id:griefworker:20140906182107j:plain

入り口の券売機でラーメン(600円)とミニチャーハン(300円)の食券を購入。 兼虎のときも思ったけど、券売機だいぶ普及してるな。

まずラーメン。

f:id:griefworker:20140906182919j:plain

麺は中細。スープは、豚骨特有の臭みを感じない、クリーミーな豚骨スープ。 一幸舎の系統に近いかも。 ただ、チャーシューの脂身部分が気になった。 トロトロになるまで煮込んである方が好み。

あとミニチャーハン。

f:id:griefworker:20140906182714j:plain

タレでしっかりと味が付いていて、それでいてパラパラで旨い。 ラーメン屋にチャーハンがあったら毎回注文している気がする。 ラーメン屋のチャーハンは中華料理屋のそれよりも好きだな。

関連ランキング:ラーメン | 博多駅東比恵駅

Tiki

福岡市内の人気カレー店としてグルメ本ではおなじみの、 天神南にある『路地裏カレー Tiki』に行ってみた。

f:id:griefworker:20140906115511j:plain

目印の看板。ここから古民家のわきを抜けて裏地に行くと

f:id:griefworker:20140906115452j:plain

こんなところに店が。看板無かったら絶対分からない。 入るまでは本当に Tiki かも疑わしかった。 隠れ家みたいで男心をくすぐられる。

開店直後でまだ席が開いていたので、待たずに座れた。 このあとすぐ席埋まったけど。

早速、スパイシーチキンカレー(800円) を注文。

f:id:griefworker:20140906114252j:plain

一口食べて驚いた。予想よりかなり辛い。 これで中辛とは・・・。 鶏肉はジューシー。カレールーはかなりスパイシーで旨い。 具にはナッツも入っているんだろうか? ときおり感じるカリっとした食感が新鮮で良かった。 額に汗をにじませながら完食。

関連ランキング:インドカレー | 天神南駅西鉄福岡駅(天神)渡辺通駅

Devise でのパスワード変更を自前で実装する

パスワード変更機能を、Devise が提供するコントローラーを使わずに、自前で実装したいときのためのメモ。

現在のパスワード・新しいパスワード・新しいパスワード(確認用) を入力して変更する場合、 update_with_password を使う。

current_user.update_with_password(
  password: "new_password",
  password_confirmation: "new_password",
  current_password: "old_password"
)

新しいパスワードで強制的に変更する場合、update を使う。 管理者がユーザーのパスワードを再発行するときなんかに使ったりする。

current_user.update(
  password: "new_password",
  password_confirmation: "new_password"
)

注意点としては、現在ログインしているユーザーのパスワードを変更すると、 直後ログアウトした状態になってしまうので、 再ログインする処理が必要。

class SettingsController < ApplicationController
  # ... 省略 ...

  def update
    respond_to do |format|
      if current_user.update_with_password(user_params)
        # パスワードを変更するとログアウトしてしまうので、再ログインが必要
       sign_in(current_user, bypass: true)
        format.html { redirect_to edit_setting_path }
      else
        format.html { render :edit }
      end
    end
  end
end

Pizzeria Farina

「地下鉄の渡辺通駅そばに美味しいピザの店がある」という情報を得たので、 食べログで探してみたところ、『Pizzeria Farina』がヒット。 家にあるグルメ本にも載っているから、ここに違いない。 さっそく行ってみた。

f:id:griefworker:20140830140336j:plain

店先の黒板にランチメニューが書いてあった。

f:id:griefworker:20140830140313j:plain

Pizzeria に来てピザを食べないでどうする。 当然ピザランチを注文した。

まずはサラダ。

f:id:griefworker:20140830132856j:plain

バルサミコの酸味が効いていて爽やか。大人の味。

ピザは定番のマルゲリータ

f:id:griefworker:20140830134251j:plain

表面はサクっとしていて、中はモチモチ。 旨い(確信)。 オイルをかけて辛味を足すと、違った味も楽しめた。

ピザの後は、デザートのパウンドケーキ。

f:id:griefworker:20140830135455j:plain

あとアイスコーヒー。

f:id:griefworker:20140830135501j:plain

サラダとピザ、それにデザートとドリンクまでついて 1080 円というのはコスパ高い。 ピザを食べに行くときのファーストチョイスになったかも。

関連ランキング:ピザ | 渡辺通駅薬院駅天神南駅

Draper と kaminari を一緒に使う

デフォルトの状態だと、kaminari が生やしたメソッドを Draper が delegate してくれない。

Draper::CollectionDecorator.delegate :current_page, :total_pages, :limit_value, :total_count

を config/initializers/draper.rb あたりに書いておく必要があった。

kaminari で Bootstrap のテーマを使う

$ bin/rails generate kaminari:views bootstrap

で Boostrap 用の kaminari のビューをダウンロードできる。 ただ、Bootstrap 2.0 のときのテーマなので、最新の 3.2 で使うには修正が必要。

app/views/kaminari/_pagenator.html.erb を次のように修正すれば使えた。

<%= paginator.render do -%>
  <ul class="pagination">
    <%= first_page_tag unless current_page.first? %>
    <%= prev_page_tag unless current_page.first? %>
    <% each_page do |page| -%>
      <% if page.left_outer? || page.right_outer? || page.inside_window? -%>
        <%= page_tag page %>
      <% elsif !page.was_truncated? -%>
        <%= gap_tag %>
      <% end -%>
    <% end -%>
    <%= next_page_tag unless current_page.last? %>
    <%= last_page_tag unless current_page.last? %>
  </ul>
<% end -%>

amatsuda/kaminari_themes には Bootstrap 3 対応のプルリクエストがいくつもあるけど、どれもマージされていない。まぁ、これくらいの修正で使えるからいいけど。