0

私は Sunspot Solr を使用しており、それを開始/停止する Capistrano タスクを作成しています。

  namespace :sunspot do
    task :start, :roles => :app do
      run "cd #{current_path} && RAILS_ENV=#{rails_env} bundle exec rake sunspot:solr:start"
    end
  end

ただし、このタスクを実行すると、Java が見つからないというエラーが発生します。

*** [err :: example.com] /home/user/deploy/project/shared/bundle/ruby/1.9.1/gems/sunspot_solr-1.3.3/lib/sunspot/solr/java.rb:5:in ``': No such file or directory - java -version (Errno::ENOENT)
*** [err :: example.com] from /home/user/deploy/project/shared/bundle/ruby/1.9.1/gems/sunspot_solr-1.3.3/lib/sunspot/solr/java.rb:5:in `installed?'
*** [err :: example.com] from /home/user/deploy/project/shared/bundle/ruby/1.9.1/gems/sunspot_solr-1.3.3/lib/sunspot/solr/server.rb:200:in `ensure_java_installed'
*** [err :: example.com] from /home/user/deploy/project/shared/bundle/ruby/1.9.1/gems/sunspot_solr-1.3.3/lib/sunspot/solr/server.rb:27:in `initialize'
*** [err :: example.com] from /home/user/deploy/project/shared/bundle/ruby/1.9.1/gems/sunspot_solr-1.3.3/bin/sunspot-solr:16:in `new'
*** [err :: example.com] from /home/user/deploy/project/shared/bundle/ruby/1.9.1/gems/sunspot_solr-1.3.3/bin/sunspot-solr:16:in `<top (required)>'
*** [err :: example.com] from /home/user/deploy/project/shared/bundle/ruby/1.9.1/bin/sunspot-solr:23:in `load'
*** [err :: example.com] from /home/user/deploy/project/shared/bundle/ruby/1.9.1/bin/sunspot-solr:23:in `<main>'
failed: "rvm_path=$HOME/.rvm/ $HOME/.rvm/bin/rvm-shell '1.9.3@project' -c 'cd /home/user/deploy/project/current && RAILS_ENV=staging bundle exec rake sunspot:solr:start'" on example.com

Sunspot の Java チェック コードはこちらです。

cd /home/user/deploy/project/current && RAILS_ENV=staging bundle exec rake sunspot:solr:startサーバー上で手動で実行すると、期待どおりに動作します。コマンドが Capistrano を介して呼び出された場合、Java が存在しない理由がわかりません。

4

1 に答える 1

0

私のサーバーでは、Java パスは「/etc/profile」スクリプト内にロードされます。

ただし、Capistrano はそのスクリプトをロードしません。

このディスカッションによると、Capistrano deploy.rb ファイルでこれを設定すると、そのシェルがプロファイル スクリプトを確実にロードし、これによって Java パスが設定されます。

default_run_options[:shell] = '/bin/bash --login'

于 2013-06-18T10:21:13.563 に答える