这是从其他地方 fork 过来的部署脚本(deploy.rb 部分代码)
namespace :deploy do
task :setup_solr_data_dir do
run "mkdir -p #{shared_path}/solr/data"
end
end
namespace :solr do
desc "start solr"
task :start, :roles => :app, :except => { :no_release => true } do
run "cd #{current_path} && RAILS_ENV=#{rails_env} bundle exec sunspot-solr start --port=8983 --data-directory=#{shared_path}/solr/data --pid-dir=#{shared_path}/pids"
end
desc "stop solr"
task :stop, :roles => :app, :except => { :no_release => true } do
run "cd #{current_path} && RAILS_ENV=#{rails_env} bundle exec sunspot-solr stop --port=8983 --data-directory=#{shared_path}/solr/data --pid-dir=#{shared_path}/pids"
end
desc "reindex the whole database"
task :reindex, :roles => :app do
stop
run "rm -rf #{shared_path}/solr/data"
start
run "cd #{current_path} && RAILS_ENV=#{rails_env} bundle exec rake sunspot:solr:reindex"
end
end
after 'deploy:setup', 'deploy:setup_solr_data_dir'
现在,我是这么做的(可能由于 capistrno 版本不同,对于 shared_path 有不同写法)
# config/deploy.rb (部分)
# 设置共享的文件夹
set :shared_children, %w(solr/data solr/pids log tmp/pids tmp/sockets public/uploads)
namespace :solr do
desc "start solr"
task :start, roles: :app, except: { no_release: true } do
run "cd #{current_path} && RAILS_ENV=#{rails_env} bundle exec rake sunspot:solr:start"
end
task :stop, roles: :app, except: { no_release: true } do
run "cd #{current_path} && RAILS_ENV=#{rails_env} bundle exec rake sunspot:solr:stop"
end
task :reindex, roles: :app do
stop
run "rm -rf #{shared_path}/solr/data"
start
run "cd #{current_path} && RAILS_ENV=#{rails_env} bundle exec rake sunspot:solr:reindex"
end
end
只要你的 solr 配置不变,每次部署就不需要重启 solr 服务。
所以 solr 服务应该设置成手动重启,或是你写个逻辑,每次部署前判断配置文件有没有变化,如果有,则重启 solr 服务。