2011-11-25 3 views
4

레일즈 v2.3 앱을 개발 중입니다. 우분투 머신에서 MySQL v5.1을 사용합니다. 레이크 작업에서 'sudo su'명령을 실행하십시오.

나는 정지레이크 작업을 가지고 다음과 같이 MySQL 데이터베이스를 시작 :
namespace :db do 
    task :some_db_task => :environment do 
     ... 

     exec 'sudo /etc/init.d/mysql stop' 
     ... 
     exec 'sudo /etc/init.d/mysql start' 
    end 
end 

당신이 코드에서 위에서 보듯이

, 내가 명령이 실행 얻을 있는지 확인 sudo을 사용했다. 그러나이 sudo 때문에 레이크 작업을 실행할 때 레이크 작업이 성공적으로 실행 되더라도 루트 암호을 입력하라는 메시지가 표시됩니다.

나는 비밀번호 입력 일을 피하려고, 그래서 내가 먼저 MySQL의/중지 한 후, 루트 사용자로 변경을 시작으로 쉘 명령을 실행할 수 있다고 생각, 그래서 나는 다음에 내 코드를 변경 :

namespace :db do 
    task :some_db_task => :environment do 
     ... 

     exec 'sudo su' 
     exec '/etc/init.d/mysql stop' 
     ... 
     exec '/etc/init.d/mysql start' 
    end 
end 

참조 , 나는 첫번째로 달릴 sudo su 명령을 추가했다. 이제 나는 레이크 작업을 다시 실행합니다. 하지만 놀랍게도 레이크 작업은exec 'sudo su'까지 실행되고은 멈추었습니다. 나머지 코드는 실행되지 않습니다. 왜? 그것을 제거하는 방법?

+1

에 대한 몇 가지 링크는'sudo는 su'는 root''등의 대화 형 터미널을 산란하고, 당신이 그것으로 재생 될 때까지 기다립니다 줘야 해. 잘못된 방법으로 문제를 풀려고 할 때'root '권한이 필요하면 암호가 필요합니다 (또는 설정이 안전하지 않습니다). – Romain

+0

가능한 복제본 http://stackoverflow.com/questions/5866632/execute-a-sudo-command-in-ruby-on-rails-app – Bohdan

+0

'sudo su'는'sudo -s'를 말하는 이상한 방법입니다. – tadman

답변

관련 문제