我目前将以下内容作为Windows服务的“可执行文件路径”。
我想了解如何将其转换为命令行应用程序,以便我可以交互式调试它。
Windows服务可执行文件的路径:“C:\ LONG_PATH_1 \ ruby \ bin \ rubyXXXX_console.exe”“C:\ LONGPATH_2 \ windows_script.rb”
windows_script.rb如下:
# console_windows.rb
#
# Windows-specific service code.
# redirect stdout / stderr to file, else Windows Services will crash on output
$stdout.reopen File.open(File.expand_path(File.join(File.dirname(__FILE__), '..', '..', '..',
'log', 'XXXX_console.output')), 'a')
$stderr.reopen $stdout
$stdout.sync = true
$stderr.sync = true
require File.join(File.dirname(File.expand_path(__FILE__)),"script_helper.rb")
require 'rubygems'
require 'win32/daemon'
include Win32
class BackgroundWindowsDaemon < Daemon
def service_init
# Do startup in service_main so that Windows Services doesn't timeout during startup
end
def service_main
BackgroundScriptHelper.request_start
BackgroundScriptHelper.monitor
end
def service_stop
BackgroundScriptHelper.request_stop
end
end
BackgroundWindowsDaemon.new.mainloop
答案 0 :(得分:1)
安装ruby调试器gem
gem install debugger
或者将gem添加到您的Gemfile中,例如,如果脚本位于/ lib文件夹中,或者类似的话。
如果您在安装过程中遇到问题,这些答案可能会对您有所帮助:Cannot install ruby-debug gem on Windows
在脚本中需要调试器
require 'rubygems'
require 'win32/daemon'
include Win32
require "debugger"
class BackgroundWindowsDaemon < Daemon
def first_method
puts "i am doing something"
end
def second_method
puts "this is something I want debug now"
# your code is here..
foo = {}
debugger
foo = { :bar => "foobar" }
end
# more code and stuff...
end
现在,如果您运行脚本并调用“second_method”,您的脚本将停在您编写“debugger”的行。现在您可以输入“irb”并启动普通控制台。您可以访问控制台中的所有本地内容,在此示例中,您可以输入“foo”和=&gt; {}将显示结果。
我必须在这里添加,我从未在Windows上安装gem,仅在Linux和Mac上安装。但我认为通过这些步骤你可以得到一个想法。你明白了吗?
有关调试的更多信息可以在这里找到:http://guides.rubyonrails.org/debugging_rails_applications.html看看这个,有更多关于Rails和Ruby 2.0的调试。
由于Rails自Rails 2.0以来已经内置了对ruby-debug的支持。在任何Rails应用程序中,您可以通过调用调试器方法来调用调试器。