1

TextMateで作成したRubyスクリプトがあり、TextMateで正常に実行できます。このスクリプトをターミナルから直接実行することもできます。

スクリプトには、次のコードのチャンクが含まれています。

# 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'。エラーはまったく発生しません。

スクリプトはMacのフォルダの下にあり/Systemますが、ファイルのアクセス許可を変更して、「全員」が「読み取りと書き込み」にアクセスできるようにしました。 編集 ユーザーのホームフォルダのすぐ下のフォルダにファイルをコピーしましたが、GeekToolにはまだ問題がありますが、TextMateやターミナルから直接問題が発生することはありません。

編集終了

2回目の編集

GeekToolには、ファイルへのパスに問題がある可能性があると思います。

たとえば、今のところインターネットから直接XMLファイルを読み取るようにプログラムを変更しましたが、それは問題なく実行されますが、プログラムがgrowlnotifyのアイコンに使用している画像がいくつかあります。TextMateを実行すると、これらのアイコンは完全に表示されます。GeekToolを使用して実行する場合...いいえ。カスタムアイコンはまったくありません。

これは、GeekToolがファイルパスを正しく処理できないかのようです。私がそうするときputs __FILE__.to_s、それは私に私の.rbファイルへの正しいファイルパスを与えます。

** 2回目の編集を終了**どうすればよいですか?

4

3 に答える 3

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
于 2009-12-20T23:49:19.763 に答える
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

また、 ruby​​-growl gem があることも忘れないでください。

于 2009-12-10T20:37:42.847 に答える
0

GeekTool が console.log または system.log に出力を吐き出すかどうかを確認しましたか?

また、「ファイルが開かれています」を超えない場合は、gem に問題があり、Hpricot が必要である可能性がありますか?

于 2009-12-12T10:14:22.237 に答える