Ruby, Mac, GEEKTOOL PERGUNTA, Direitos de acesso a arquivos?
-
19-09-2019 - |
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?
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?