2010-11-19 96 views
0

我的服務器中有兩個用戶:rootdevelopment。每當Sphinx重新啓動時,searchd.production.pid的所有權總是更改爲root。不過,我總是使用development來完成任何上限,更新代碼等。在Sphinx重啓後自動將searchd.production.pid所有權更改爲所需所有者

我有這個在我的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用戶運行,我只能更改文件的所有權,如果我是老闆。任何想法?謝謝!

回答

0

這不是capistrano問題,而是SSH。

我想你正在從你部署的同一臺服務器上運行capistrano。

你用什麼用戶來運行'cap'並不重要,真正重要的是如果你是服務器的用戶,你是什麼用戶。

如果你是'開發'用戶和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