woshidan's blog

そんなことよりコードにダイブ。

Apache+PhusionPassengerで動かす4.0系のRails(データベースはMySQL)をcapistrano3でデプロイしたときのNG集

作業順=エラー出した順だったので、そのまま書くとへんてこになりすぎるため、
作業まとめは、後で依存関係等含めて作業を整理した形で書いています。

ただ、せっかくなので、エラーメッセージ・警告メッセージとその対処も書いておきます。
検索して使ってください。なんていうか、逆引きみたいな感じで……。

正しくないかもしれないものもあります。

 

Capfileを先に書いた状態でbundle exec cap installをしたときに出てきたみたいです。

deploy.rbやCapfileを削除した後、

をすると

とログが出て、まっさらな状態でCapfileなどが生成されました。

cap installはdeploy.rbやCapfileなどのを自動生成をするコマンドで、
すでにこれらファイルが存在する場合はやる必要が無いですし、せっかく書いた設定が初期化されたりするので止めましょう。

書いた時は、最初っからやり直すつもりだったので、まあ……。まあ……(泣)。

とデプロイする環境を指定しなかったときにでます。
(どこか設定をいじれば無しでも自動的にproduction環境の設定でデプロイしてくれるような気はするんですが、まだ分かっていません)
言われた通りに、capとdeployの間にproductinoを入れて

としましょう。


コマンドがいくらもいかないうちに、

capistranoでサーバへ接続する時のホスト名もポート番号の指定が間違っています。

deploy/production.rbのserverの項を

のように追加しました。

サーバへログインしてデプロイ作業をするユーザを指定、そのユーザがログインする時の認証方法を指定する必要があります。
deploy/production.rbのserverの項の以下の項を直しました。

また、Capfileにも以下の設定を追加しました。

 

 

capistranoはデフォルトで、rvenbのバイナリが
/usr/local/rbenv
にあることを想定していますが、前の記事で
~/.rbenv
にrbenvをインストールしています。
which rbenv
でrbenvのバイナリの場所を確認すると、
~/.rbenv/bin/rbenv
にあります。

capistranoのrbenvのパスの設定を変更しましょう.
config/deploy.rbを以下のように変更します。

~ = /home/user_nameですので注意してください(私が)。

で上記のurlからソースコードを取ってくるように設定していたのですが、上記urlへアクセスするための認証キーを
へ登録していませんでした。
デプロイ先のサーバに以下のようにサーバの/home/my_user/.ssh/configにホストの設定を追加します。

なんでかHostのパラメータがbitbucket.orgだと接続が出来なかったので、そこ理解したら追記するかもです。
bitbucketのデプロイキーの追加に関しては => https://confluence.atlassian.com/display/BITBUCKET/Use+deployment+keys
(ぶっちゃけ直接画面見た方が早いです)

そして、

に変更すると通るはずです。

デプロイ先のディレクトリへの書き込み、実行権限をデプロイ用ユーザに与えてあげてください。
apacheを動作させるユーザと異なっていると777みたいな恐ろしい設定をするはめになるかもしれないので、
ついでにapacheの動作ユーザも確認しておいてください(http://woshidan.hatenablog.com/entry/2015/01/01/220321参照)

mysql2のgemがない
mysql2のgemを入れましょう

 

みたいなログが出て進まない。
CentOSmysqlをクライアント側から使うためのソフトがはいっていません。
http://d.hatena.ne.jp/tanamon/20090623/1245781226
このへんが参考になります。とりあえず、サーバへログインして、

をしてください。 その後、

とすると

でインストールできるようになるかと。 その後、

mysql_configというファイルがあることを確認してください。 そして、

という風にインストールできるはずです。

という警告が出た。


というエラーを見てとりあえずはデプロイ先にアクセスしたいと考えて、


とかしていませんか、握手しましょう(え)。
でも、744とするとサーバが動かなかったりしませんか。
apacheを動作させるユーザとデプロイ作業をするユーザを揃えてから(=> http://woshidan.hatenablog.com/entry/2015/01/01/220321)


をして、所有者=デプロイ作業をするユーザ以外読み込みしか出来ないようにするとこの警告は消えるはずです。

これは二つ対処法があります。

MySQLのクライアントソフトが全部読む設定に書く方法
/etc/my.cnfに以下の設定を追加して、mysqlを再起動してください。

(文字コードについてはこことは関係ないんですが、設定を追加しておく時は追加しておいた方がいいです)

Railsのデータベースの設定に追加する方法
http://qiita.com/pchatsu/items/a7f53da2e57ae4aca065

のようにRailsのdatabase.ymlにsocketの項を追加しましょう。

database.ymlの設定はいいはずなのに

と出た。
サーバでmysqlを開いてアプリケーションで使用するデータベースとそのデータベースへ接続するユーザを作ってください。

デプロイ用ユーザに当該ディレクトリへのアクセス権限を与えてください。

最後までタスクが進んだのにサーバへアクセスするとApacheのテストページが表示されている
少なくとも
デプロイ後、Railsが起動していない可能性
ファイル自体はアップロードが全部出来たが、必要なシンボリックリンクが貼れていない可能性
(ドキュメントルートの設定が間違っている可能性)
があります。
3つ目はVirtualHostの設定を確認してきてください(=> http://woshidan.hatenablog.com/entry/2015/01/01/220321)

デプロイ後、Railsが起動していない可能性
config/deploy.rbのnamespace :deploy ブロック内に以下のタスクを追加してみてください。

Phusion Passengerを使っている場合、tmp/restart.txtを作成することで、Railsを再起動できます。
http://redmine.jp/tech_note/apache-passenger/

ファイル自体はアップロードが全部出来たが、必要なシンボリックリンクが貼れていない可能性

してみてください(というか最初からしようよ、私)。


みたいな感じのログがでていませんか。
capistranoがディレクトリのハードリンクを作成しようとして、失敗しています。
ディレクトリやファイルへのハードリンクはルートユーザしか作成権限がありません。
対処法は、作業用ユーザをルートユーザに変更するか、ハードリンクを貼るタスクを、シンボリックリンクに貼るタスクに上書きします。
http://stackoverflow.com/questions/21692601/capistrano-3-process-failing

今回は後者の対処法を取りました。後者の対処法を取る場合は、config/deploy.rbのnamespace :deployブロック内に
以下のタスクを追加します。


順当にいけばlinked_filesも失敗するはずなので、こちらも上書きしておきます。

assetsが表示されない
apacheから静的ファイルが表示されない設定になっている
precompileが上手く出来ていない
ポート番号を間違えてアクセスしている(=> http://woshidan.hatenablog.com/entry/2014/12/29/062635)

precompileが上手く出来ていない
このへんをご参照ください
http://woshidan.hatenablog.com/entry/2014/12/28/150556
http://shoken.hatenablog.com/entry/2014/05/20/200215

apacheから静的ファイルが表示されない設定になっている
config/environments/production.rbが以下の設定になっているか確認してください。