2009-12-10 1 views
1

У меня есть скрипт Ruby, который я построил в TextMate и может успешно работать в TextMate. Я также могу успешно запустить этот скрипт прямо с терминала.Ruby, Mac, Geektool вопрос, права доступа к файлам?

Сценарий имеет этот кусок кода в нем:

# 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' 

Когда скрипт запускается с помощью GeekTool, он никогда не получает мимо puts 'File is opened'. Он даже не попал puts 'The End'. Это не дает никакой ошибки.

Сценарий находится под папкой под папкой /System на моем Mac, но я изменил разрешения на доступ к файлам, чтобы «каждый» имел «читать» доступ к «&». EDIT Я просто скопировал файлы в папку непосредственно в моей домашней папке пользователя, и у нее все еще есть проблема в GeekTool, но не в TextMate или прямо через терминал.

END EDIT

второй Редактировать

Я думаю GeekTool может иметь проблемы с путями к файлам может быть.

Например, я изменил программу, чтобы просто прочитать XML-файл прямо из Интернета на данный момент, и это просто отлично, но есть некоторые изображения, которые программа использует для значков в growlnotify. При прохождении через TextMate эти значки отображаются отлично. При запуске с использованием GeekTool ... нет. Никакой пользовательский значок вообще.

Как будто GeekTool просто не может правильно обрабатывать пути к файлам. Когда я делаю puts __FILE__.to_s, он дает мне правильный путь к файлу моего .rb-файла.

** end 2nd edit ** Что мне делать?

+0

Что фактическая команда оболочки в GeekTool, что вы пытаетесь запустить? – wesgarrison

+0

ruby ​​/path/to/my/file.rb Если я нахожу точную команду в Terminal, она работает. –

ответ

1

Geektool запускает все команды из /, поэтому относительные имена путей не будут работать при попытке запустить growlnotify.

puts Dir.pwd #outputs "/" 

Вам нужно будет пройти абсолютные пути изображений, чтобы growlnotify.

Текущий путь может быть получен с

File.dirname(__FILE__) 

Таким образом, вы будете использовать

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 
+1

Такая же проблема стоит, когда вы также пытаетесь открыть файл xml локально. –

1

Попробуйте обернуть все это в блоке, как показано ниже, который будет заходить в /tmp/geektool.txt. Затем вы можете увидеть, есть ли какие-либо исключения, которые вы не знаете (например, разрешение файла).

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

Кроме того, не забудьте, что есть рубиновый рычаг.

+0

«Кроме того, не забывайте, что есть рубиновый рычаг». Wiggity-Что ?! –

+0

Ой, подождите, я уже изучил это. Мне нужно, чтобы это работало без сетевого подключения. Спасибо, хотя я попробую журнал. –

+0

Я не получаю ошибок, но по иронии судьбы, пытаясь записать в тот же файл tmp/geektool.txt прямо внутри моего блока, просто записывая текущее время на него. Это работает в Textmate и Terminal, но не тогда, когда скрипт запускается GeekTool. Soooo ........ Не знаю, куда идти отсюда. –

0

Вы проверили, выводит ли GeekTool любой результат на console.log или system.log?

Кроме того, если он никогда не пройдет, «Файл открыт», это может быть проблема с драгоценными камнями и требует Hpricot?

+0

Я не уверен, где проверить console.log или system.log. Я постараюсь понять это. Это даже не означает, что «Файл открыт», что означает, что у него проблемы с обычным «открытым» кодом. –

+0

Ничего в журналах. –