AWSの問題かな? と思ったが違った。
以下によるとPHPのOpcacheはシンボリックリンクの切り替えではクリアされないっぽい。
http://kohkimakimoto.hatenablog.com/entry/2014/09/13/154342
なので、Capistranoでデプロイすると
「ソースコードは変更されているはずなのに前と挙動が変わらない」
という現象が発生する。
どうすればいーのか?
結論から言うと、Capistranoでデプロイ後に php-fpm を reload するタスクを deploy.rb に追加しました。
namespace :deploy do # ここが追加した部分 desc "clear opcache" task :clear_opcache do on roles(:web) do execute "/etc/init.d/php-fpm reload" end end after :restart, :clear_cache do on roles(:web), in: :groups, limit: 3, wait: 10 do # Here we can do anything such as: # within release_path do # execute :rake, 'cache:clear' # end end end end # finished の後に clear_opcache を実行するように設定 after 'deploy:finished', 'deploy:clear_opcache'
これによって web というロールに紐付いたサーバ全てに reload を実行するようになる。
ロールの設定方法はググって下さい。
結構ハマった。