Pergunta

Eu tenho um script de rubi que eu construí Textmate e pode ser executado com sucesso no Textmate. Também posso executar com sucesso este script diretamente do terminal.

O script tem esse pedaço de código:

# Get the XML file
puts 'Opening the file'
open("messages.xml", "r") do |f|
   puts 'File is opened'

   theXML = Hpricot::XML(f)
   puts 'Trying to get the message_entity'
   message_entity = GetMessage(theXML)

   # Build the system command
   puts 'Getting the author and the message'
   theAuthor = message_entity.search(:author).text
   theMessage = message_entity.search(:messagetext).text     

   # Get the correct image for this author
   theAuthorImage = ''

   case theAuthor
      when 'James' : theAuthorImage = 'images/me32.png'
      when 'Zuzu' : theAuthorImage = 'images/Zuzu32.png'
   end

   puts "/usr/local/bin/growlnotify '" + theAuthor + " says' -m '" + theMessage + "' -n 'Laurens Notes' --image '" + theAuthorImage + "'"
   #system("/usr/local/bin/growlnotify '" + theAuthor + " says' -m '" + theMessage + "' -n 'Laurens Notes' --image '" + theAuthorImage + "'")
end
puts 'The End'

Quando o script é executado por Geektool, nunca passa puts 'File is opened'. Nem sequer atingiu puts 'The End'. Não dá nenhum erro.

O script está sob uma pasta sob o /System Pasta no meu Mac, mas alterei as permissões de arquivo para permitir que "todos" tenham acesso de leitura e gravação ".EDITARAcabei de copiar os arquivos para uma pasta diretamente na pasta da minha casa do usuário e ainda tem o problema no GeekTool, mas não no Textmate ou diretamente no terminal.

ENDO ENDIT

2ª edição

Eu acho que o GeekTool pode ter um problema com os caminhos para os arquivos, talvez.

Por exemplo, mudei o programa para apenas ler o arquivo XML diretamente da Internet por enquanto e faz isso bem, mas há algumas imagens que o programa está usando para os ícones em Growlnotify. Quando executado através do TextMate, esses ícones exibem perfeitamente. Quando correr usando Geektool ... não. Nenhum ícone personalizado.

É como se o GeekTool simplesmente não tivesse lidar com os caminhos de arquivo corretamente. Quando eu faço puts __FILE__.to_s Isso me dá o filepath correto ao meu arquivo .rb.

** Fim da 2ª edição ** O que devo fazer?

Foi útil?

Solução

O GeekTool executa todos os comandos dos nomes de caminhos relativos / tão relativos, não funcionarão ao tentar executar o GrowlNotify.

puts Dir.pwd  #outputs "/"

Você precisará passar os caminhos absolutos das imagens para rosnar.

O caminho atual pode ser recuperado com

File.dirname(__FILE__)

Então você usaria

theAuthorImage = File.dirname(__FILE__)

case theAuthor
  when 'James' : theAuthorImage += '/images/me32.png'
  when 'Zuzu'  : theAuthorImage += '/images/Zuzu32.png'
end

cmd = "/usr/local/bin/growlnotify '#{theAuthor} says' -m '#{theMessage}' -n 'Laurens Notes' --image '#{theAuthorImage}'"
puts cmd
system cmd

Outras dicas

Tente embrulhar tudo em um bloco como abaixo, que registrará para /tmp/geektool.txt. Então você pode ver se há alguma exceção acontecendo que você não conhece (como permissão de arquivo).

begin
  #file.open... etc
rescue Exception => e
  file.open('/tmp/geektool.txt', 'w'){|f| f.puts "#{e}\n\n#{e.backtrace}"}
end

Além disso, não se esqueça de que há a jóia do rubi-g-grão.

Você verificou se o GeekTool vomita alguma saída para console.log ou System.log?

Além disso, se nunca superar o 'arquivo é aberto', pode ser um problema com as gemas e exigir o HPRICOT?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top