首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有PID文件错误部署与太阳黑子与卡皮斯特拉诺

没有PID文件错误部署与太阳黑子与卡皮斯特拉诺
EN

Stack Overflow用户
提问于 2013-04-24 12:42:02
回答 2查看 1.2K关注 0票数 1

我正试图用Capistrano来部署太阳黑子Solr。我一直在根据这个要点:https://gist.github.com/doitian/1795439来设置它。

deploy.rb

代码语言:javascript
复制
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中托管我的生产应用程序:

代码语言:javascript
复制
production:
  solr:
    hostname: [My Server IP]
    port: 8983
    log_level: WARNING
    # read_timeout: 2
    # open_timeout: 0.5

当我尝试运行cap 时,会得到以下错误:

代码语言:javascript
复制
* 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

我遗漏了什么?任何帮助都是非常感谢的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-24 12:58:43

run执行solr:stop任务中提供的命令时,您似乎还没有运行solr,因此它们不是solr的pid文件。你在试图阻止一个不存在的过程。

如果从run返回的代码是错误代码,则Capistrano任务将引发异常。您可以通过强制该命令永远不返回错误来解决这个问题。

使run命令看起来如下

代码语言:javascript
复制
run("YOUR COMMAND HERE > /dev/null 2>&1 || true")

现在,如果在solr未运行时调用solr:stop,则true将返回,让Capistrano继续运行。

票数 3
EN

Stack Overflow用户

发布于 2013-12-02 13:11:39

与Deefour的解决方案类似,更详细的方法可能是将“run”命令包装在“开始/救援”语句中:

代码语言:javascript
复制
....
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
...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16192309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档