iriya-ufo's blog

Curiosity was simply the first derivative of knowledge.

Docker for Mac を使う

『Mac に Docker 環境を構築する』を書いてしばらくしたら boot2docker が非推奨となって『Docker-machine で Mac に Docker 環境を構築する』を書いたら今度は Docker for Mac がナウいとかなって今回の記事に至ります。仮想環境は変化が速くていろいろ大変です。

Docker for Mac はネイティブに動作する Docker 環境らしく先日β版から正式公開となったようです。Docker が Linux カーネル上で動作するのにネイティブってどういう意味や?と思ってましたが、どうやら VirtualBox のようなホスト型仮想環境ではなく Mac OS X 組み込みのハイパーバイザー型の HyperKit を使って仮想環境を作るから速いらしいとのことでした。ネットワーク周りに面倒ごともなさそうなので今から環境作るなら Docker for Mac 一択かなという感じがします。

概要

初めてインストールする場合は Docker for Mac にしたがっていけばすぐに終わります。 Docker Toolbox などを使っていた場合は移行が必要です。僕は brew で各種コマンドをインストールして使っていました。

基本的な差異はここに丁寧にまとめられています。

簡単にポイントだけ抜き出して書くと

Docker Toolbox

  • Docker Toolbox は各種 docker コマンドが /usr/local/bin に入る
  • 証明書とかの情報は $HOME/.docker/machine/machines/default に入る
  • eval $(docker-machine env default) で環境変数をロードする

Docker for Mac

  • /Applications にアプリがインストールされる
  • 各種コマンドは /usr/local/bin に symlink が貼られる
  • 実体は /Applications/Docker.app/Contents/Resources/bin

さらに Docker for Mac の特徴として以下があります。

  • VirtualBox ではなく HyperKit を使う
  • docker-machine で作成したものには影響を与えない
  • Docker for Mac のインストール時に default イメージやコンテナに関してはローカルにあるものからコピーされオリジナルは維持する
  • /var/tmp/docker.sock ソケットを使ってやり取りするから環境変数とかいらない

設定

以上を踏まえると以下の手順でよさそうです。

  • VirtualBox はそのままでもアンインストールしてもいい
  • .zsh などに書いた環境変数設定は unset する
  • brew でいれた docker ツール群はアンインストールする
  • Docker for Mac をインストールする

また Docker Toolbox が使いたくなったときは環境変数をセットするだけで良さそうです。

Perfume のライブに行ってきた

『Perfume 6th Tour 2016「COSMIC EXPLORER」スタンディングエディション in 幕張メッセ』行ってきました。

初めてのライブで右も左も分からないような自分でしたが、めちゃくちゃ楽しめました。 お客さんはざっと2万人〜3万人、そして今回はスタンディングエディションという初の試みで2時間半のライブ時間ずーーーーっと立ちっぱなし! 終わったあと相当疲れましたが、ライブ中踊れるノリはいいですね、心地よい疲労感です。

のっちもかしゆかもあーちゃんもみんなみんな最高に可愛くてカッコ良かった。

自分は、ライブって何がいいんだろう、BDで見たら三人のダンスとかくっきり見れるのに、なんでわざわざ足を運んで観に行くのだろうと思ってた。

今回までは。

ライブの良さって伝えるの難しいんですけど、僕が一番感動したのは大音響と一体感でした。 あまり詳しくはかけませんが、開幕のカウントダウンが0になって始まった瞬間。 音で心臓が震える。足がぞわぞわする。鳥肌がたつ。これ音だけで、ですよ。かなりの重低音と大音量でいやがおうにもテンションあがる。 これは家で再現するのはどう考えても無理だなという爆音。 それからライブ会場にきてるみんなと手を振ったりはねたり拍手したり。これぞ The 一体感。

あと Perfume のライブはとにかくかっこいい。 テクノポップの楽曲にあう会場の演出感がすごい、ビームが飛んでて宇宙っぽい。

COSMIC EXPLORER はとくに好きなアルバムで何回も聞いてて、今回のライブもこれらの楽曲が多く使われてて本当に良かった。

みんな Perfume のライブ行ったほうがいいよ。

COSMIC EXPLORER(初回限定盤A)(2CD+Blu-ray)

「劇場版 響け!ユーフォニアム」感想

観てきました!「劇場版 響け!ユーフォニアム」 いやぁよかったです。感想を一言でと問われれば・・・

音響が神!

映画館の大スクリーンと迫力ある音響、これは劇場版ならではの良さです。素晴らしかった。

内容はTVアニメの総集編なのですが、初見でも十分楽しめるように再構成されている感じでした。 もちろんワンクールのアニメを二時間たらずに詰め込んでいるのでTV版を観た人は『あのシーンはカットかぁ』といったのがいっぱいあると思う。 全体的にギャグっぽい表現はばっさりカット、先輩と後輩、同級生の話などもばっさりカット!カット!でした。

特に前半は久美子のナレーションとともにポンポン進んでいった感じです。 ちょっと物足りなかったのは、みんなが本気で全国を目指したきっかけみたいな部分の表現。 鬼畜メガネと言われている滝先生の『なんですか、これ』から始まって生徒が一致団結してサンフェスに出場するまでの流れ。 あまりにポンポン進みすぎて、えっ、みんなやる気マンマンじゃん!みたいな感じでした。まぁ尺ないし妥当なところか。

それでも追加シーンがあったり、録り直してるなと思われるセリフシーンがあったりしてよかったです。 一つ言うとすれば、なつき先輩をもっと出して欲しかったよ・・・

あと久美子と麗奈の関係は短いながらもよくまとまっていたと思います。 TVアニメ版ではゆっくり丁寧に二人の距離が縮まっていってからのあの名シーン、そう登山山頂での協奏!ここでぐっと距離感が近くなりました。 劇場版では同じシーンのはずなんだけどちょっと受ける印象が変わりました。それまでの掛け合いをすっとばしてここのシーンに移るので、ようやく打ち解けたという感じではなく、二人だけで秘密を共有した、みたいなそんな印象でした。

『みんながお祭りに行ってる中、私たちは山に登ったりなんかしてる、それっておかしい、でもそれが特別』みたいなそんな感じ。

それと、このシーンもしっかり入ってましたよ!!

それにしても最後の演奏シーンはやっぱり凄かったです。もともとTV版が劇場かと思うくらいの鬼クオリティーだったんですが、映画館で観ると倍増してましたね。 そして多分ですけど、追加シーンもいくつか入ってたように思います。

TV版観た人もそうでない人も楽しめる作品に仕上がっていると感じました。

ああーーーーー、青春っていいなーーーーーー!!!

家に帰ってきて速攻でサントラを聴いたよ。 劇場版の余韻に浸りながらヘッドホンで聴くサントラは格別ですな。

『劇場版 響け!ユーフォニアム~北宇治高校吹奏楽部へようこそ~』オリジナルサウンドトラック Reflection of youthful music

『劇場版 響け!ユーフォニアム~北宇治高校吹奏楽部へようこそ~』オリジナルサウンドトラック Reflection of youthful music

PS.

そういえば、TV版にはなかった新カットのシーンで、なんか知らないキャラの子がいるぞ?ってなって調べてみたら、鎧塚みぞれ、という子であることが分かりました。新キャラかと思ったけど、ちゃんとTV版にも出てました。いや分からんて人数多すぎて・・・

ニコニコにみぞれちゃんだけを集めたまとめ動画があってさすがだと感心したよ。なんでも二期への重要な伏線キャラだとか。そういえばデカリボンちゃんと映ってたから、そこらへんの関係とかが描かれるのかな。楽しみです。

メタプログラミング Ruby

今どきのプログラミングといえば Web

Web といえば Ruby on Rails

といった感じで気軽に Rails から触り始める人は多いと思います。それはそれで結構なんですが、Rails しか触っていないと Ruby の真のすごさが分からないし、Ruby の本を読んでもなんであれで Rails が作れるのか分からない。 Rails のソースを読んでも黒魔術だらけで全く読めない。 そんな人にこそ『メタプログラミング Ruby』を勧めます。Rails や多くの gem で使われている黒魔術の技術をこれでもかというくらいに分かりやすく基礎から解説してくれています。

Ruby の文法は覚えた初心者から中級者の人、Ruby Gold 試験を受けたい人、メタプログラミングの世界を知りたい人、ほとんどの Rubyist は読んでおくべき一冊ですね。

「Rubyは君を信頼する。Rubyは君を分別のあるプログラマとして扱う。 Rubyはメタプログラミングのような強力な力を与える。 ただし、大いなる力には、大いなる責任が伴うことを忘れてはいけない」

メタプログラミングRuby

「我が闘争」を読んだ

全体的な話しの流れは『以前読んだホリエモンの本』と似たような内容だった。

幼少期の話しが多く、どちらかというと自己啓発的な感じが『ゼロ』で、起業の話しから逮捕に至るまでの事業の話しとホリエモンが何をどう考えていたのか、というのにページを割いてるいるのが本書『我が闘争』という印象。

中でもライブドア前身のオン・ザ・エッジ設立の話しが興味深かった。IT企業のアルバイトとして働く日々の中、実力と経験を積んでいき、これなら独立できるだろうと思いたち、会社を設立する。設立資金は当時付き合っていた彼女の父親から借金をしたということ、ホリエモン、彼女、友人の三人で起業したということ、などへーと思える内容が多かった。

会社は急成長を遂げ、さらなる成長のため上場を目指すというホリエモンと、わざわざ上場までしなくてもいいじゃないという創業者メンバーとの対立によるいざこざなど、ベンチャーにはあるあるな内容だなぁと思いつつ読んだ。

その他の話しは言うほど深く立ち入っておらず、他の本にも書いてあることだ。

権威的なものを嫌い徹底抗戦を貫く姿勢はいかにもホリエモンらしいと言える。

我が闘争 (幻冬舎単行本)

Elastic BeansTalk で遊んでみた

Elastic BeansTalk は AWS が提供している Paas サービスだ。Heroku よりはとっつきにくいけどそれほど難しくはない。慣れてしまえばさくっと環境が作れてよい。今回移行作業を行ってみたが案外ハマりポイントなどがあったり、不向きなアプリだったのでやめたが、機会があればこれで運用してみたいと思う。備忘録として記録しておく。環境は Mac です。

おおまかに以下のような手順で進めていく。

  1. AWS CLI ツールのインストール
  2. CLI ツールの設定
  3. アプリケーションを作る
  4. EB 設定ファイルの編集

AWS CLI ツールのインストール

BeansTalk だけなら awscli の方は必要ないが、どこかしらで使うのでついでにインストールしておく。

$ brew install awscli
$ brew install awsebcli

以下のコマンド補完をしておくと便利である。

Bash の場合

Add the following to ~/.bashrc to enable bash completion:
  complete -C aws_completer aws

Zsh の場合

Add the following to ~/.zshrc to enable zsh completion:
  source /usr/local/share/zsh/site-functions/_aws

CLI ツールの設定

AWS CLI ツールの設定を行う。プロファイル名は適当に。キー設定などのため、事前に IAM で専用ユーザーを作っておく。

$ aws configure --profile プロファイル名

アクセスキーの設定

AWS Access Key ID [None]: xxxxxxxxxxxxxxxxxx

シークレットキーの設定

AWS Secret Access Key [None]: xxxxxxxxxxxxxxxxxxxxxx

リージョンの設定、ap-northeast-1 は東京リージョン

Default region name [None]: ap-northeast-1

アウトプットフォーマットの設定、デフォルトは json

Default output format [None]:

~/.aws というディレクトリが作成されおり、その中にコンフィグファイルが入っている。

次に EB CLI ツールの設定を行っていく。こちらも IAM で専用ユーザーを作っておくとよい。先ほどの AWS CLI ツールの時に作成したユーザーでもいいし、別のユーザーでもいい。ポリシーで決める。ここでは対話式での設定となる。

では Rails プロジェクトに移動して $ eb init として初期化する。以下の内容について聞かれるので適宜こたえる。

リージョン                 ap-northeast-1 (東京)
AWS アクセスキー ID           お客様のアクセスキー (IAM ユーザー)
AWS 秘密鍵                   お客様のシークレットキー (IAM ユーザー)
アプリケーション名         eb-your-app-name
Ruby を使用しますか?             y キー (はい)
プラットフォームのバージョン  Ruby 2.2 (Puma)
SSH をセットアップしますか?  y キー (いいえ)

.elasticbeanstalk/config.yml というファイルが作成される。 .gitignore が更新されているのでコミットしておく。

また間違えてパラメーター設定してしまった場合の消し方は以下の通り。

$ eb config delete .elasticbeanstalk/config.yml

アプリケーションを作る

Elastic BeansTalk では一番外側の大きな枠をアプリケーションと呼ぶ。開発用と本番用など環境を分けたい場面はよくあると思うが、それは環境という呼ばれ方をする。EB でアプリを作る際は環境を意識するとよいだろう。以下のコマンドを実行すると Rails プロジェクトのアップロードから ELB の設定、AutoScaling の設定、EC2 インスタンスの作成など一通り行われる。

$ eb create 環境名

ここで以下のエラーが発生した。

1
[Instance: i-xxxxxxxx] Command failed on instance. Return code: 11 Output: (TRUNCATED)...ps://rubygems.org/... Fetching dependency metadata from https://rubygems.org/.. You need to install git to be able to use gems from git repositories. For help installing git, please refer to GitHub's tutorial at https://help.github.com/articles/set-up-git. Hook /opt/elasticbeanstalk/hooks/appdeploy/pre/10_bundle_install.sh failed. For more detail, check /var/log/eb-activity.log using console or EB CLI.

gem を GitHub のリポジトリからダウンロードするなら git をインストールしろ、とある。 $ eb ssh でインスタンスにログインして git をインストールしてもいいがそれではせっかくの Paas の利点が失われるので、設定ファイルを書いて対応する。

EB 設定ファイルの編集

カスタマイズした設定をサーバーにデプロイしたい場合 .ebextensions/01packages.config というように .ebextensions というディレクトリを作ってその中にコンフィグを書いていく。コンフィグはアルファベット順に実行されるので 01 02 … という感じで接頭辞をつけておくとよい。

.ebextensions/01packages.config
1
2
3
packages:
  yum:
    git: []
.ebextensions/02database.config
1
2
3
4
5
6
7
8
# Symlink the ondeck database.yml to database.yml.example
files:
  "/opt/elasticbeanstalk/hooks/appdeploy/pre/01a_symlink_database_yml.sh":
    mode: "000777"
    content: |
      #!/bin/bash
      cd /var/app/ondeck/config
      ln -sf database.yml.example database.yml
.ebextensions/03puma.config
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
files:
  "/etc/init.d/puma":
    mode: "000777"
    content: |
      #!/usr/bin/env bash

      . /opt/elasticbeanstalk/support/envvars.d/sysenv
      RAILS_ENV=production

      case "$1" in
        start)
          /etc/init.d/passenger stop
          cd /var/app/current
          bundle exec puma -C config/puma.rb
        ;;
        stop)
          if [ -f /var/app/support/pids/puma.pid ]; then
            kill -TERM `cat /var/app/support/pids/puma.pid`
            rm -rf /var/app/support/pids/puma.pid
          fi
        ;;
        *)
          echo "puma [start|stop]"
          exit 1
        ;;
      esac
      exit 0

  "/opt/elasticbeanstalk/hooks/preinit/26_puma_start.sh":
    mode: "000777"
    content: |
      /etc/init.d/puma start

  "/opt/elasticbeanstalk/hooks/restartappserver/enact/01_restart.sh":
    mode: "000777"
    content: |
      /etc/init.d/puma stop
      /etc/init.d/puma start

  "/opt/elasticbeanstalk/hooks/configdeploy/enact/99_reload_app_server.sh":
    mode: "000777"
    content: |
      /etc/init.d/puma stop
      /etc/init.d/puma start

  "/opt/elasticbeanstalk/hooks/appdeploy/enact/99_reload_app_server.sh":
    mode: "000777"
    content: |
      /etc/init.d/puma stop
      /etc/init.d/puma start

commands:
  remove_25_passenger:
    command: "rm -f /opt/elasticbeanstalk/hooks/preinit/25_passenger.sh"
    ignoreErrors: true
  remove_26_passenger_start:
    command: "rm -f /opt/elasticbeanstalk/hooks/preinit/26_passenger_start.sh"
    ignoreErrors: true

ネフローゼが治ったり治らなかったり

前回記事の更新から二ヶ月ほど経ちました。しばらくは大丈夫だったのですが、なんか体調悪いなぁと思ったら再発していたということが、この短いスパンで二回くらいありました。だらだらと続くこの感じは今までになかったところです。 相変わらずステロイドの効きが良いので、2錠(10mg/day)ほど飲んでおけば数日でよくなってきます。 睡眠、食事、運動、この辺りのバランスが悪くなって疲れがたまるとダメっぽいですね。

5月11日の検査結果

  • 尿蛋白 87.1 mg/dl

「ジェフ・ベゾス 果てなき野望」を読んだ

ジェフ・ベゾス 果てなき野望-アマゾンを創った無敵の奇才経営者

Amazon はなぜこれほどまでに巨大企業に成長できたのだろう。Google と違って最新鋭のテクノロジーから始まったわけではない、Apple のように美しさを追求したデバイスを作っているのでもない。Amazon はインターネット黎明期にオンライン書店という、アイデア自体は誰でも考えられることから始まった企業だった。

ここまで成長した大きな要因はやはりジェフ・ベゾス氏の経営哲学にある。

エブリシングストアという果てしない野望を抱いて、所詮は書店のオンライン販売と考えられていたサイトが、いつのまにかカテゴリーが増え商品が増えていった。 またマーケットプレイスの導入で得た経験が AWS という後にビッグ産業となるクラウド事業の先駆けとなった。

エブリシングストアという野望にどれだけベゾスが力を入れてるのかが分かるストーリーがあった。ベビー用品を扱うようになったときの Amazon とクイッドシーの戦いだ。買収の提案が進んでいくなかでとった Amazon の価格戦略がこうだった。

パンパース一袋の値段はダイアパーズ・ドットコムの45ドルに対してアマゾンは39ドル、定期お得便なら30ドル以下となった。自分たちが知る配送料金とP&Gの卸価格からクイッドシーが試算したところによると、アマゾンは、3ヶ月で1億ドル以上の赤字を紙おむつだけでだす計算になったらしい。

関係者は、無慈悲にもライバルを崖から追い落として買収を成功させたベゾスの手腕に今回も驚くばかりだった。この戦いがよく見える位置にいたという関係者は、「勝利者をはっきりさせるためなら、ためらわずに辺り一帯を焼き払う人々なのです」と感想を漏らした。

その他にもアマゾンと出版社、アマゾンとウォルマート、などライバルとの壮絶な戦いのストーリーが描かれている。その時にもベゾスはただ一点、顧客のことを考え続けているのだ。

ベゾスという奇才の経営者を追った半自叙伝にも思える本書は、学生、起業家、投資家などいろんな人が読んでおくとよい一冊となるだろう。 またベゾスといえば、伝説のスピーチがある。本書と合わせて一度は観ておきたい。

「リモートチームでうまくいく」を読んだ

リモートワークを取り入れて布教していることで有名なソニックガーデンさんの社長、倉貫さんの書かれた本。

リモートワークにはメリットとデメリットがあるが、導入しようとしたときに一番障壁になるのは、その文化作りであると思う。 ソニックガーデンさんが目指してる企業文化は以下のようにある。

私たちが目指すのは急成長することよりも、持続していくことを大事にする会社であり、大企業になるのではなく、人数は少なくても信頼関係で結ばれた組織になるということです。

やはりリモートチームとして動くには大企業は不向きということなのだろう。

またセルフマネジメントのできる社員とオープンでフラットな情報展開を良しとし、チャット形式のツールを使ってコミュニケーションを取ることに抵抗がない人たちがいることも大事だと思う。

またなぜリモートチームを広めようとしているのか、その考えがいいなと思ったので紹介しておきたい。

人が楽しく働くために必要なのは、高い報酬が得られることよりも、好きな仕事をすることや、信頼し合える仲間がいて良好な人間関係が築けていることです。

ソニックガーデンさんでは合宿を会社で泊まり込みでしたり、家族を誘ってキャンプにいったりとちょっと面白そうなことをやってるらしい。気になる会社ですね。 こういう会社、働き方がもっと増えていって欲しいと思います。

『リモートチームでうまくいく』

リモートチームでうまくいく

Passenger をやめて Puma にした

とあるプロジェクトで Nginx + Passenger という組合せで動かしていたのだが、リクエストの同期処理動作で具合が悪かったので Puma に切り替えた話。

環境など

  • Nginx や Passenger は設定済みで動作していた
  • Capistrano でデプロイしている
  • システム全体に rbenv で ruby をインストールしている
  • デプロイユーザーが別にいる(今回の場合 deployer)

sudo の許可

deployer で puma の再起動ができるようにするため sudo 権限を与える。全コマンドの sudo は危険なので特定コマンドのみに制限する。

$ visudo
deployer ALL=(ALL) ALL
deployer ALL=(ALL) NOPASSWD: /sbin/service puma restart

rbenv PATH の設定

/etc/profile.d/rbenv.sh
1
2
3
export RBENV_ROOT="/usr/local/rbenv"
export PATH="$RBENV_ROOT/bin:$PATH"
eval "$(rbenv init -)"

起動スクリプトを作成

所有者は root で chmod 755

/etc/init.d/puma
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#!/bin/bash
#
# puma-myproject

# chkconfig: 2345 82 55
# processname: puma-myproject
# description: Runs puma-myproject for nginx integration.

# Include RedHat function library
. /etc/rc.d/init.d/functions

# The name of the service
NAME=puma

# The username and path to the myapp source
USER=deployer
APP_PATH=/your-app-path/current

# The PID and LOCK files used by puma and sidekiq
UPID=$APP_PATH/tmp/pids/puma.pid
ULOCK=/var/lock/subsys/$NAME

# The options to use when running puma
#OPTS="-C $APP_PATH/config/puma.rb -e production"
#OPTS="-F $APP_PATH/config/puma.rb"
OPTS="-F /your-app-path/shared/puma.rb"

# Ruby related path update
RUBY_PATH_PATCH="PATH=$PATH:/usr/local/bin:/usr/local/lib && export PATH && "
BUNDLE_CMD=bundle
PUMA_CMD=pumactl
. /etc/profile.d/rbenv.sh

start() {
  cd $APP_PATH
  # Start puma
  echo -n $"Starting $NAME: "
  daemon --pidfile=$UPID --user=$USER $BUNDLE_CMD exec $PUMA_CMD $OPTS start
  puma=$?
  [ $puma -eq 0 ] && touch $ULOCK
  echo

  return $puma
}

stop() {
  cd $APP_PATH

  # Stop puma
  echo -n $"Stopping $NAME: "
  killproc -p $UPID
  puma=$?
  [ $puma -eq 0 ] && rm -f $ULOCK
  echo

  return $puma
}

restart() {
  stop
  start
}

get_status() {
  status -p $UPID $NAME
}

query_status() {
  get_status >/dev/null 2>&1
}

case "$1" in
  start)
    query_status && exit 0
    start
    ;;
  stop)
    query_status || exit 0
    stop
    ;;
  restart)
    restart
    ;;
  status)
    get_status
    exit $?
    ;;
  *)
    N=/etc/init.d/$NAME
    echo "Usage: $N {start|stop|restart|status}" >&2
    exit 1
    ;;
esac

exit 0

puma 設定ファイルを作成

所有者は deployer で chmod 644

/your-app-path/shared/puma.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/usr/bin/env puma

directory '/your-app-path/current'
rackup "/your-app-path/current/config.ru"
environment 'production'
daemonize true

pidfile "/your-app-path/shared/tmp/pids/puma.pid"
state_path "/your-app-path/shared/tmp/state/puma.state"
stdout_redirect '/your-app-path/current/log/puma.access.log', '/your-app-path/current/log/puma.error.log', true

threads 0,16
workers 0

bind 'unix:///your-app-path/shared/tmp/sockets/puma.sock'

preload_app!

on_restart do
  puts 'Refreshing Gemfile'
  ENV["BUNDLE_GEMFILE"] = "/your-app-path/current/Gemfile"
end


on_worker_boot do
  ActiveSupport.on_load(:active_record) do
    ActiveRecord::Base.establish_connection
  end
end

nginx 設定ファイル

バックアップを作っておく

/usr/local/nginx/conf/nginx.conf
1
2
3
4
5
6
7
8
3c3
< worker_processes  auto;
---
> worker_processes  1;
17a18,20
>     passenger_root /usr/local/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/passenger-5.0.23;
>     passenger_ruby /usr/local/rbenv/versions/2.2.2/bin/ruby;
>
/usr/local/nginx/conf/conf.d/app.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
1,4d0
< upstream app {
<     server unix:///your-app-path/current/tmp/sockets/puma.sock;
< }
<
20,27c16,17
<         gzip_static on;
<         proxy_read_timeout 60;
<         proxy_connect_timeout 60;
<         proxy_redirect off;
<         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
<         proxy_set_header Host $http_host;
<         proxy_set_header X-Forwarded-Proto $scheme;
<         proxy_set_header X-Real-IP $remote_addr;
---
>         passenger_enabled on;
>         rails_env sandbox;
30,34d19
<             break;
<         }
<
<         if (!-f $request_filename) {
<             proxy_pass http://app;

起動確認と自動起動

$ service nginx configtest
$ chkconfig puma on

その他動かなかったので修正など

secret キーが必要だったので再生成する。 .env ファイルを作成する。所有者は deployer とする。

/your-app-path/shared/.env
1
2
SECRET_KEY_BASE="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
RAILS_ENV="production"

secret キーの生成は以下のコマンドで作れる。

$ bundle exec rake secret