質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Capistrano

Rubyで書かれたサーバオーケストレーションで、複数のサーバでスクリプトを実行する際に用いられます。主な使用用途はWebアプリケーションのデプロイメントです。 アプリケーションのバージョンアップ自動化、およびデータベースの変更などもできます。

Q&A

1回答

1918閲覧

cakePHP2.9をCapistrano 3でデプロイしたときに500エラーが発生する

sho_furu

総合スコア7

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Capistrano

Rubyで書かれたサーバオーケストレーションで、複数のサーバでスクリプトを実行する際に用いられます。主な使用用途はWebアプリケーションのデプロイメントです。 アプリケーションのバージョンアップ自動化、およびデータベースの変更などもできます。

0グッド

0クリップ

投稿2016/10/14 12:17

表題の通り、cakePHP2.9をCapistrano 3でデプロイしたときに500エラーが発生してしまいます。

deploy.rbでは、

  • デプロイ後にapp/tmp以下のパーミッションを777に変更
  • apacheの再起動

を行っています。

deploy.rb

set :tmp_dirs, %w{app/tmp app/tmp/logs app/tmp/sessions app/tmp/cache app/tmp/cache/models app/tmp/cache/persistent app/tmp/cache/views} namespace :misc do desc "Fix permission in :tmp_dirs." task :fix_permission do on roles(:app) do dirs = fetch(:tmp_dirs) if dirs.is_a?(Array) dirs.each do |d| path = shared_path.join(d) if test "[ ! -d #{path} ]" execute "mkdir -p #{path}" end execute "chmod 0777 #{path}" end end end end desc 'Restart httpd' task :restart do on roles(:web) do execute :sudo, :service, "httpd", "graceful" end end end after 'deploy:finished', 'misc:fix_permission' after 'deploy:publishing', 'misc:restart'

プロダクション環境にデプロイするproduction.rbでは基本的な設定のみです。

server 'xx.xxx.xx.xx', user: 'xxx', roles: %w{app db web}, my_property: :my_value set :deploy_to, '/path/to/app' set :stage, "production"

現状の対処方法

プロダクション環境では、通常はcore.phpからデバックレベルは0にしているのですが、一度プロダクション環境で直接2に編集にしてから、再度0に戻すと、きちんとページが表示されます。

どなたか対処方法についてご教授いただけますと非常に助かります。
どうぞよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

popobot

2016/10/14 12:20

500エラーが出ているときに、tmp/logs配下にerror.logとか出てないですか?
sho_furu

2016/10/14 12:33

エラーログ周り見ているのですが、出ていないのですよね...
popobot

2016/10/14 13:02

不思議ですね、誰が500を返したんでしょう...。core.phpをいじって解決したならCakeっぽいですが、Cake内でExceptionとかあったならerror.logに何か書かれそうですが。しかもデバックレベルを変えると直ってしまうのではデバックしづらいですね。
popobot

2016/10/14 23:57

再現性があるようなら、core.phpのdebugを2でコミットしておいて、デプロイするとどうなるのかやってみると切り分けになるかもしれないですね。もしくはdebug=0でもエラーページにエラー情報を出すという方法でもいいかもしれませんが
guest

回答1

0

もしかしたらCakeのキャッシュが悪さをしているのかもしれません。
Cakeはテーブル定義やコードの一部をキャッシュする機能を持っているので、テーブル定義やコードを更新した際にキャッシュとコードで不整合が起きて、エラーがでているのかもしれません。なお、debugを2にするとキャッシュは毎回クリアされるように設定されていることが多いので、debugを2にしたら解決した点と辻褄も合いそうです。

※経験的には、特にテーブル定義時には必ずキャッシュをクリアしないとダメだと思います。コードだけだったら結構問題ないことが多いのです...。

ということで、デプロイ時にキャッシュをクリアしたらどうでしょうか。

投稿2016/10/15 04:31

popobot

総合スコア6586

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sho_furu

2016/10/17 08:30

Capistranoでデプロイするたびにtmp以下のファイルは生成していたので、キャッシュは消えていると思っておりました... キャッシュファイルだけが過去のファイルを参照してしまっているということなのでしょうか。
popobot

2016/10/17 08:36 編集

ファイルを消しているなら消えていると思います。ちなみにAPC(メモリ)キャッシュを使っているということはないですか? 以下のようなcore.phpとかに設定があります。 $engine = 'Apc';
sho_furu

2016/10/17 08:48 編集

core.phpをみたところ $engine = 'File';となっており、APCキャッシュは使用していないですね
sho_furu

2016/10/17 08:49

ファイルは削除はしてないですね。 Capistranoによって、シンボリックリンクの張り替えだけを行っているので、tmpだけ過去のファイルを参照しに行っているということがあるのでしょうか...
popobot

2016/10/17 08:57

プロセスが動き続けているなら、古いファイルを参照する可能性はありますが...再起動しているなら、新たにファイルをオープンし直すので、問題ないと思いますが... php-fpmとか使っていますか?
sho_furu

2016/10/17 09:12

php-fpmは使用していないですね... 長くお付き合いいただき本当にありがとうございます。
popobot

2016/10/17 09:43

うーん、現象的にはキャッシュっぽいので、次回再現したときに、キャッシュファイルがどうなっているかとか見てみるといいかもしれないですね
sho_furu

2016/10/17 09:52

Capistranoでデプロイ時にマイグレーションを実行するコードをを追加したのですが、時々tmp以下のファイルへの書き込み権限によるエラーでマイグレーションに失敗しています。 なお、再度実行すると問題なく実行されます... Capistranoの実行順序にも何か問題がありそうかなと思っていますので、勉強してみます。
退会済みユーザー

退会済みユーザー

2016/11/03 06:11

フロントの httpd のログには何も出ていないのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問