在Sphinx重启后自动将searchd.production.pid所有权更改为所需的所有者

时间:2010-11-19 02:56:10

标签: ruby-on-rails sphinx capistrano

我的服务器中有两个用户:rootdevelopment。每次重新启动Sphinx时,searchd.production.pid的所有权始终更改为root。我总是使用development来执行任何上限,更新代码等。

我在deploy.rb

中有这个
after "deploy:update_code", "sphinx:stop"
after "deploy:migrate", "sphinx:start"

namespace :sphinx do
  desc "Start Sphinx Searchd"
  task :start, :roles => :app do
    run "cd #{deploy_to}/current/; /usr/bin/rake ts:start RAILS_ENV=#{rails_env}"
  end

  desc "Stop Sphinx Searchd"
  task :stop, :roles => :app do
    run "cd #{deploy_to}/current/; /usr/bin/rake ts:stop RAILS_ENV=#{rails_env}"
  end
  desc "Restart Sphinx Searchd"
  task :restart, :roles => :app do
    run "cd #{deploy_to}/current/; /usr/bin/rake ts:restart RAILS_ENV=#{rails_env}"
  end
end

但是这是使用development用户运行的,如果我是所有者,我只能更改文件的所有权。任何的想法?谢谢!

1 个答案:

答案 0 :(得分:0)

这不是一个capistrano问题,而是SSH。

我猜你是从你正在部署的同一台服务器上运行capistrano。

使用什么用户来运行“上限”并不重要,如果您将“服务器”用于服务器,那么真正重要的是用户。

如果您是“开发”用户并且ssh到您的服务器,那么您是谁?

root?,然后修复你的.ssh / config文件。

您的deploy.rb看起来不错,但我会用:

干掉它
namespace :sphinx do
  desc "Start Sphinx Searchd"
  task :start, :roles => :app do
    rake "ts:start"
  end

  desc "Stop Sphinx Searchd"
  task :stop, :roles => :app do
    rake "ts:stop"
  end
  desc "Restart Sphinx Searchd"
  task :restart, :roles => :app do
    rake "ts:restart"
  end
end

def rake(rake_task)
  if rake_task
    raise "Rails environment not set" unless rails_env
    run "cd #{current_path} && rake #{rake_task} RAILS_ENV=#{rails_env}"
  end
end