私は 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 が存在しない理由がわかりません。