перезапустите sunspot solr, когда выполните развертывание с capistrano в рельсах 3.1 - PullRequest
3 голосов
/ 27 марта 2012

У меня есть проект рельсы 3.1 в производственной среде.

Это мой deploy.rb сейчас:

$:.unshift(File.expand_path('./lib', ENV['rvm_path'])) # Add RVM's lib directory to the load pathe
require "rvm/capistrano"                  # Load RVM's capistrano plugin.
require "bundler/capistrano"
set :rvm_ruby_string, 'ruby-1.9.2-p318@global'  
set :rvm_type, :user
set :application, "domain.com"
set :user, 'user'


#set :repository,  "#{user}@ip.ip.ip.ip:~/app"
set :repository, "ssh://git@bitbucket.org/user/app.git"

set :keep_releases, 3
set :scm, :git
set :use_sudo, false
set :deploy_to, "~/#{application}"
#set :deploy_via, :copy

set :unicorn_conf, "#{deploy_to}/current/config/unicorn.rb"
set :unicorn_pid, "#{deploy_to}/shared/pids/unicorn.pid"

set :deploy_via, :remote_cache
ssh_options[:forward_agent] = true
default_run_options[:pty] = true


role :web, "ip.ip.ip.ip"                          # Your HTTP server, Apache/etc
role :app, "ip.ip.ip.ip"                          # This may be the same as your `Web` server
role :db,  "ip.ip.ip.ip", :primary => true # This is where Rails migrations will run


namespace :deploy do

    task :restart do
        run "if [ -f #{unicorn_pid} ] && [ -e /proc/$(cat #{unicorn_pid}) ]; then kill -USR2      `cat #{unicorn_pid}`; else cd #{deploy_to}/current && bundle exec unicorn -c #{unicorn_conf} -E #{rails_env} -D; fi"
    end
    task :start do
        run "bundle exec unicorn -c #{unicorn_conf} -E #{rails_env} -D"
    end
    task :stop do
        run "if [ -f #{unicorn_pid} ] && [ -e /proc/$(cat #{unicorn_pid}) ]; then kill -QUIT  `    cat #{unicorn_pid}`; fi"
    end

end


load 'deploy/assets'

after "deploy:restart", "deploy:cleanup" 

Я хочу сделать эти задачи в Капистрано. Сейчас я выполняю эти задачи вручную:

1º Я убиваю солнечные пятна с помощью:

а) Найдите пид с помощью ps aux | grep 'solr'

б) Убить пид с kill pid_number

2º Удалить индексный solr в производственной среде, если существует с:

а) rm -r solr/data/production/index

3º включить солнечное пятно с помощью:

а) RAILS_ENV=production rake sunspot:solr:start

4º Модели Reindex с:

а) RAILS_ENV=production rake sunspot:mongo:reindex

Мой вопрос:

Как я могу добавить эти задачи в мой deploy.rb?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 19 апреля 2012

Это может быть хорошей отправной точкой:

namespace :solr do                                                              
  task :reindex do
    run "cd #{current_path} && #{rake} RAILS_ENV=#{rails_env} sunspot:solr:reindex" 
  end
end 

Вы можете просто вызвать rake sunspot:solr:stop вместо kill?Я не уверен, что вам нужно удалить индекс, если вы собираетесь сделать переиндексацию ...

0 голосов
/ 05 декабря 2012
task :stop_solr do
  begin
    run("cd #{deploy_to}/current && /usr/bin/env rake sunspot:solr:stop RAILS_ENV=#{rails_env}")
  rescue Exception => error
    puts "***Unable to stop Solr with error: #{error}"
    puts "***Solr may have not been started. Continuing anyway.***"
  end
end

#restart and reindex any newly added full search fields:
task :restart_solr do
  begin
    run("cd #{release_path} && /usr/bin/env rake sunspot:solr:start RAILS_ENV=#{rails_env}")
  rescue Exception => error
    puts "***Unable to start Solr with error: #{error}."
    puts "***Continuing anyway.***"
  end
end

task :reindex_solr do
  begin
    run("cd #{release_path} && /usr/bin/env rake sunspot:reindex RAILS_ENV=#{rails_env}")
  rescue Exception => error
    puts "***Unable to reindex Solr with error: #{error}"
    puts "***Continuing anyway.***"
  end
end

Кроме того, как я уже упоминал в своем комментарии к ответу Криса, у вас будут проблемы, если вы очистите старые каталоги Capistrano, если вы не убьете процесс SOLR и не заставите его указывать на новые индексные файлы. Одним из способов избежать этого сценария является настройка SOLR в общем каталоге и сброс символической ссылки во время развертывания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...