Рубин для романтики? Как обновить скрипт от себя - PullRequest
4 голосов
/ 07 декабря 2009

Моей жене нравится, когда я использую свои способности гиков, чтобы быть "романтичным", поэтому у меня была идея установить скрипт рубина на ее Mac, который будет присылать ей цитаты и небольшие заметки от меня в течение дня. Я уже понял, что буду использовать GeekTool для запуска скрипта в фоновом режиме, и я буду использовать growlnotify для отображения сообщений. Теперь мне нужен способ обновить скрипт из интернета на случай, если я его поменяю. Я практически ничего не знаю о ruby, кроме как взаимодействовать с консолью.

У меня 2 гола: 1) Есть XML-файл с сообщениями. Это должно быть с возможностью обновления из Интернета, но быть локальным, если у нее нет сетевого подключения. 2) Обновите сам скрипт из интернета на случай, если я найду ошибки или захочу его улучшить.

Теперь я знаю, что я мог бы просто вручную обновить скрипт на ее Mac, если бы захотел, но я подумал, что это был бы хороший способ изучить более продвинутый рубин.

Приоритетом 1 будет файл XML, который сможет загрузить новую версию, если она изменится. Какие рубиновые вещи я могу использовать, чтобы загрузить файл и сохранить его в определенном месте локально?

Я использовал hpricot раньше, это был бы хороший путь?

Примечание: Mac моей жены - Macbook, работающий под управлением Leopard (но, возможно, 10.4, не уверен на 100%).

EDIT

Если кому-то интересна первая версия скрипта, вы можете найти ее здесь

p.s. -> первая версия скрипта не обновляется сама по себе, она просто обновляет файл messages.xml и все.

Ответы [ 3 ]

1 голос
/ 07 декабря 2009

Разве ваша жена не увидит, что вы придете, если у вас есть файл с сообщениями xml, приходящими случайным образом в течение дня? Не лучше ли вам отправить сообщение, а ей получить его мгновенно?

Для этого можно использовать протокол XMPP .
Приложение вашей жены подключается к серверу XMPP; ты тоже. И вы можете отправить ей сообщение, когда захотите.
Вы даже можете заставить сообщения отправляться на определенное расстояние между каждым из них.
Поэтому, когда она идет кочевником без подключения к Интернету, и вы это знаете, вы отправляете ей 3-4 сообщения заранее. И она получит их позже.

Для обновления скрипта это та же проблема, что и для любого сервера веб-сайта.
Поэтому я бы открыл SSH-порт на ее компьютере и использовал capistrano для развертывания самой последней версии приложения.

1 голос
/ 07 декабря 2009
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 голосов
/ 08 декабря 2009

Как долго сообщения? 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, и он будет работать до тех пор, пока вы не завершите процесс.

...