アクトインディ開発者ブログ

子供とお出かけ情報「いこーよ」を運営する、アクトインディ株式会社の開発者ブログです

デプロイすると Solr の管理画面が 404 Not Found

こんにちは、tahara です。

Sunspot を導入し Solrいこーよ本番環境で動くようになりました。

Solr 関連のファイル(jar や xml とか)は、Rails アプリのコードと一緒にリポジトリに入れてあります。 Solr は /var/www/outing/current/solr/start.jar で動かしていました。

特に問題なく動いていたのですが、ある日ブラウザで Solr の管理画面を開こうとしたら 404 Not Found になってしまいました。

デプロイには Capistrano を使っています。 デプロイの度に /var/www/outing/current が切り替てっいき、 やがて Solr が起動した時のディレクトリ (/var/www/outing/releases/20121111121212 とか) は削除されます。 そのため Solr の管理画面が 404 Not Found になってしまったようです。

次のように変えました。

  • Solr を /var/www/outing/current の下で動かすのをやめ、/opt/solr で動かす。
    • これがそもそもの間違いでした。
  • デプロイの時に Solr 関連のファイルを /opt/solr にコピーする。
    • after 'deploy:restart' でコピー
  • コピー後に Solr をリロードする。
    • curl で URL をたたくだけ。

config/deploy/production.rb

# sunspot (sunspot) tasks
set :solr_host, 'ec2-123-123-123-123.ap-northeast-1.compute.amazonaws.com'
namespace :sunspot do
  # solr copy & reload
  task :copy_and_reload, :hosts => solr_host do
    run "cp -a #{latest_release}/solr/* /opt/solr"
    run "curl -s 'http://localhost:8983/solr/admin/cores?wt=json&action=RELOAD&core=outing'"
  end

  # solr reindex
  task :reindex, :hosts => solr_host do
    run "cd #{latest_release} && #{rake} RAILS_ENV=#{rails_env} sunspot:solr:reindex "
  end
end
after 'deploy:restart', 'sunspot:copy_and_reload'

URL をたたくだけで、一瞬で設定ファイルをリロードしてくれる Solr に心から感謝しました。