Автоматическое изменение владельца searchd.production.pid на нужного владельца после перезапуска Sphinx - PullRequest
0 голосов
/ 19 ноября 2010

У меня на сервере два пользователя: root и development.Каждый раз, когда Сфинкс перезапускается, право собственности на 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 голосов
/ 23 ноября 2010

Это не проблема капистрано, а SSH.

Я полагаю, вы запускаете capistrano с того же сервера, на котором вы развертываете.

Не имеет значения, какого пользователя вы используете для запуска cap, на самом деле важно, чтопользователь, если вы 'ssh' для своего сервера.

Если вы являетесь пользователем 'ssh' и являетесь пользователем 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
...