2012-07-28 43 views
0

我嘗試在我的rake任務中運行system "./do_backup.py",其中do_backup.py是同一目錄中的python程序,但該命令無提示失敗。但是,我可以使用system "./do_backup.py"來運行它。爲什麼我的系統調用在irb中工作,但沒有在rake任務中工作?

我在我的rake任務和IRB中都調用了system "whoami",用戶都是一樣的。

編輯

這裏的Rake文件:

desc "Back up a file onto S3" 
task :backup do 
    S3ID = "AKIAJM3NRWxxx" 
    S3KEY = "0A5kuzV+E1dkaPjxxx" 
    SRCBUCKET = "rose-test-4" 
    NUM_BACKUP_BUCKETS = 2 

    system "whoami" 
    system "./do_backup.py #{S3ID} #{S3KEY} #{SRCBUCKET} #{NUM_BACKUP_BUCKETS}" 
end 
+0

'Kernel.system()'工作正常,從內Rakefiles ;我的猜測是你在調用它之前改變了目錄。請發佈你的Rakefile。 – 2012-07-28 01:56:14

+0

對我很好。你是從Python腳本所在的目錄運行它的嗎? 'system「ls -l ./do_backup.py」'顯示什麼?最後一次調用'system()'(啓動Python腳本的那個)的返回值是什麼? – 2012-07-28 02:12:01

+0

你是對的!它從rails項目的根目錄執行rake任務,而不是'lib/tasks'。你如何建議我從rake任務內部進入'lib/tasks'?當然''系統「cd lib/tasks'不起作用 – 2012-07-28 02:19:51

回答

2

正如在評論中討論,這是正在從錯誤的目錄中運行。您可以使用Dir.chdir()更改目錄。例如:

... 
    Dir.chdir("lib/tasks") 
    system "./do_backup.py #{S3ID} #{S3KEY} #{SRCBUCKET} #{NUM_BACKUP_BUCKETS}" 
end 

當然,作爲@muistooshort指出,簡單的事情就是剛剛從那裏運行它:

system "#{Rails.root}/lib/tasks/do_backup.py #{S3ID} #{S3KEY} #{SRCBUCKET} #{NUM_BACKUP_BUCKETS}" 
+0

'chdir(「#{Rails.root}/lib/tasks」)'可能是一個更好的主意。 – 2012-07-28 02:30:57

相關問題