2013-04-24 3 views
1

Я пытаюсь развернуть Sunspot Solr с Capistrano. Я настраивал это на основе этой сути: https://gist.github.com/doitian/1795439.Нет ошибки PID-файла с использованием солнечного пятна с Capistrano

deploy.rb

namespace :deploy do 
    task :start do ; end 
    task :stop do ; end 
    task :restart, :roles => :app, :except => { :no_release => true } do 
    run "#{try_sudo} touch #{File.join(current_path,'tmp','restart.txt')}" 
    end 

    desc "Migrate Database" 
    task :migrate_db do 
    run "cd #{current_path} && rake db:migrate RAILS_ENV=production" 
    run "touch #{current_path}/tmp/restart.txt" 
    end 

    desc "Create Solr Directory" 
    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", "deploy:cleanup", "deploy:migrate_db", 'deploy:setup_solr_data_dir', 'solr:stop', 'solr:reindex', 'solr:start' 

Я установил IP для моего внутреннего сервера, который хозяйничает мое производство приложение в sunspot.yml:

production: 
    solr: 
    hostname: [My Server IP] 
    port: 8983 
    log_level: WARNING 
    # read_timeout: 2 
    # open_timeout: 0.5 

Когда я пытаюсь запустить колпачок разверните, я получаю следующую ошибку:

* 2013-04-24 08:28:04 executing `solr:stop' 
    * executing "cd /home/username/apps/appname/current && RAILS_ENV=production bundle exec sunspot-solr stop --port=8983 --data-directory=/home/username/apps/appname/shared/solr/data --pid-dir=/home/datacomm/apps/appname/shared/pids" 
    servers: ["0.0.0.0"] 
    [0.0.0.0] executing command 
** [out :: 0.0.0.0] java version "1.7.0_15" 
** [out :: 0.0.0.0] 
** [out :: 0.0.0.0] OpenJDK Runtime Environment (IcedTea7 2.3.7) (7u15-2.3.7-0ubuntu1~12.04.1) 
** [out :: 0.0.0.0] 
** [out :: 0.0.0.0] OpenJDK 64-Bit Server VM (build 23.7-b01, mixed mode) 
** [out :: 0.0.0.0] 
** [out :: 0.0.0.0] **No PID file at /home/username/apps/appname/shared/pids/sunspot-solr.pid** 
** [out :: 0.0.0.0] 
    command finished in 990ms 
failed: "rvm_path=$HOME/.rvm/ $HOME/.rvm/bin/rvm-shell '1.9.3' -c 'cd /home/username/apps/appname/current && RAILS_ENV=production bundle exec sunspot-solr stop --port=8983 --data-directory=/home/username/apps/appname/shared/solr/data --pid-dir=/home/username/apps/appname/shared/pids'" on 0.0.0.0 

Что мне не хватает? Любая помощь приветствуется.

ответ

3

Когда run выполняет команду, предусмотренную в задаче solr:stop, похоже, что вы еще не запускаете solr, поэтому их нет файла pid для присутствия solr. Вы пытаетесь остановить процесс, которого не существует.

Задача Capistrano собирается выдать исключение, если код, возвращаемый с run, является кодом ошибки. Вы можете исправить это, вынудив эту команду никогда не возвращать ошибку.

сделать что run команда выглядеть следующим образом

run("YOUR COMMAND HERE > /dev/null 2>&1 || true") 

Теперь, если вы звоните solr:stop когда Solr не работает, true вернется, позволяя Capistrano продолжать.

1

Аналогично решению Deefour, в более многословным подход может быть обернуть команду «Выполнить» в «начать/спасения» заявление:

.... 
desc "start solr" 
task :start, :roles => :app, :except => { :no_release => true } do 
    begin 
    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" 
    rescue Exception => error 
    puts "***Unable to start Solr with error: #{error}." 
    puts "***Continuing anyway.***" 
    end 
end 
... 
Смежные вопросы