2009-12-07 2 views
4

내 아내는 나의 괴짜 능력을 "로맨틱"으로 사용할 때 그것을 즐깁니다. 그래서 루비 스크립트를 사용하여 Mac에 설치하여 내게 시세표와 작은 노트를 보내는 것이 좋습니다. 일. 나는 백그라운드에서 스크립트를 실행하기 위해 GeekTool을 사용할 것이며 메시지를 표시하기 위해 growlnotify를 사용할 것임을 이미 알았습니다. 이제 내가 바꿀 경우 웹에서 스크립트를 업데이트하는 방법이 필요합니다. 콘솔과 상호 작용하는 방법 이외의 루비에 대해서는 기본적으로 아무것도 알지 못합니다.루비를위한 로맨스? 자체에서 스크립트를 업데이트하는 방법

2 목표 : 1) 메시지가있는 XML 파일이 있어야합니다. 인터넷에서 업데이트 할 수 있어야하지만 네트워크에 연결되어 있지 않은 경우 로컬이되어야합니다. 2) 버그를 발견하거나 개선하고 싶다면 인터넷에서 스크립트 자체를 업데이트하십시오.

내가 원한다면 필자의 Mac에서 스크립트를 수동으로 업데이트 할 수 있다는 것을 알았지 만, 좀 더 진보 된 루비를 배우기에 좋은 방법이라고 생각했습니다.

우선 순위 1은 XML 파일이며 변경된 경우 새 버전을 다운로드 할 수 있습니다. 파일을 다운로드하여 로컬에서 특정 위치에 저장하려면 어떤 루비 항목을 사용해야합니까?

나는 전에 hpricot을 사용했는데, 좋은 방법일까요?

참고 : 내 아내의 Mac은 Leopard를 실행하는 Macbook입니다 (그러나 10.4, 100 %는 아닐 수도 있습니다).

편집

사람이 스크립트의 첫 번째 버전에 관심이 있다면 당신은 here

추신 찾을 수 있습니다 -> 스크립트의 첫 번째 버전은 실제로 자체를 업데이트하지 않으며 단지 messages.xml 파일을 업데이트합니다.

+2

질문의 요지는 놓치지 마세요. 그러나 Leopard는 10.5 (10.4 아님)의 동의어입니다. –

+0

나는 그녀가 그녀의 기계에 10.5 또는 10.4를 가졌는지 모르겠다. 나는 Intel 칩이 아님을 알고있다.) –

답변

1
require 'net/http' 

Net::HTTP.start("your.webhost.com") { |http| 
    resp = http.get("/messages/messages.xml") 
    open("messages.xml", "wb") { |file| 
    file.write(resp.body) 
    } 
} 

뭔가해야 할 일이 있습니다. Ruby 스크립트를 다운로드 한 다음 호출 할 수도 있습니다.

exec("ruby script2.rb") 
#no further lines in script1 will execute 
+0

우선 순위 2까지, 첫 번째 루비 스크립트가 두 번째 루비 스크립트를 다운로드하고 저장 한 후 첫 번째 루비 스크립트에 의해 호출되는 두 번째 루비 스크립트를 가질 수 있을까? –

+0

"script1의 더 이상 행이 실행되지 않습니다"라고 말하면 처음 스크립트가 끝날 때까지 또는 전혀 의미가 없습니까? 즉 동일한 스크립트 내에 2 개의 서로 다른 "exec"행을 둘 수 있습니까? –

+0

내 말은 ... 하나의 간부 라인. 다른 스크립트를 모듈이나 클래스로 만들어야하고 exec없이 액세스하려고한다면 스크립트를로드해야합니다. – MattMcKnight

1

메일 메시지가 하루 종일 임의로 오는 파일이있는 경우 아내가 나타나지 않습니까? 메시지를 보내고 메시지를 즉시 수신하는 것이 더 좋지 않습니까?

이렇게하려면 XMPP 프로토콜을 사용할 수 있습니다.
아내의 응용 프로그램 자체가 XMPP 서버에 연결됩니다. 너도. 그리고 언제든지 그녀에게 메시지를 보낼 수 있습니다.
각 메시지 사이의 간격을두고 메시지를 강제로 보낼 수도 있습니다.
그래서 그녀는 인터넷 연결이없는 유목민이되어 그 사실을 알게 될 때 3 ~ 4 개의 메시지를 미리 보냅니다. 그리고 그녀는 나중에 그들을받을 것입니다.

스크립트 업데이트의 경우 웹 사이트 서버와 비슷한 문제입니다.
그래서 그녀의 컴퓨터에 SSH 포트를 열고 가장 최신 버전의 응용 프로그램을 배포하려면 capistrano을 사용합니다.

+0

스크립트를 하루 종일 무작위로 실행하고 싶습니다. 15 분마다 메시지가 표시 될 수 있습니다. 이것들은 반복 될 수있는 미리 정의 된 메시지가 될 것이지만 나는 그녀의 컴퓨터에 접근 할 필요가 없을 때마다 메시지에 추가 할 수 있기를 원합니다. –

+0

어쨌든 나는 XMPP에 갈 것이다 :) –

0

메시지의 기간은 얼마입니까? 짧은 경우 XML이 약간 과잉 될 수 있습니다. 왜 한 줄에 하나의 메시지가있는 텍스트 파일을 사용하지 않을까요?

#!/usr/bin/env ruby 
require 'open-uri' 

def growl_msg(msg) 
    %x{growlnotify -m "#{msg}"} 
end 

def read_msg 
    begin 
    f = open("http://www.yoursite.com/messages.txt").read 
    File.open("messages.txt", 'w') {|f| f.write(f) } #write local copy 
    rescue 
    f = File.open("messages.txt").read 
    end 
    growl_msg(f.split("\n").sort_by{rand}[0]) #growl a random line 
end 

while true do 
    read_msg 
    sleep(15*60) # 15 minutes between messages 
end 

스크립트를 실행하기 위해 GeekTool을 사용하는 것은 아마도 필요하지 않습니다. nohup myscript.rb으로 스크립트를 시작하면 프로세스를 종료 할 때까지 계속 실행됩니다.

관련 문제