openSUSE:WebYaST技巧
调试 Ruby on Rails 应用程序
Ruby 有一个集成的调试器,类似于 gdb。
安装 Ruby 调试器
Ruby 调试器在 ruby-debug Ruby gem 中可用。可以使用以下命令安装
sudo gem install ruby-debug
它还将安装所有依赖的 Ruby gem。(注意:目前没有可用的 RPM 包)。
启动调试器
从 Rails 应用程序启动
首先,需要在应用程序中标记调试器将启动的位置,使用 debugger 关键字。
然后,必须在调试环境中启动应用程序 - 这很简单,只需使用启动脚本的 --debugger 选项,例如使用
script/server --debugger
命令启动 Rails 应用程序,输出将如下所示
=> Booting WEBrick => Rails 2.3.2 application starting on http://0.0.0.0:8080 /webservice/config/environment.rb Registering plugin resources => Debugger enabled => Call with -d to detach => Ctrl-C to shutdown server
在 Rails 启动时启动
有时,即使在加载 Rails 组件之前,也需要调试器,例如,如果问题发生在加载 Rails 组件时。在这种情况下,使用命令
rdebug script/server -- -p 3000 --debugger
直接在调试器中启动应用程序。(注意双破折号字符串,它结束 rdebug 选项)。
Rails 加载代码非常复杂,如果可能的话,应该使用第一种方法,否则您将花费太多时间浏览庞大的 Rails 加载代码。
使用调试器
当应用程序执行 debugger 命令时,它会停止,并且在启动应用程序的终端中会打开一个调试会话。
最重要的基本命令
- l (line) - 打印源代码脚本(l= 打印当前行)
- c (continue) - 继续应用程序,退出调试器
- bt (backtrace) - 打印执行堆栈(调用了哪些函数)
- n (next) - 执行下一条命令
- s (step) - 执行下一条命令,进入函数
- v (var) - 显示变量(v l 打印局部变量,v g 打印全局变量)
- h (help) - 列出更多可用命令及其详细信息
此外,可以使用标准的 Ruby 命令来打印或检查当前对象,例如使用 object.class、objec.inspect 方法。还可以修改当前变量,只需使用 var = value 命令。
更多链接
http://blog.nanorails.com/articles/2006/7/14/a-better-rails-debugger-ruby-debug
使用 GDB 附加到 Ruby 进程
如果您需要附加到正在运行的 Rails(或通常的 Ruby)应用程序,可以使用 GDB 调试器。当您的应用程序停止响应但仍在运行时,并且无法启动 debugger 命令时,这是必需的。
GDB 不直接支持 Ruby 调试,但有一些宏可以使其变得容易。有关更多信息,请参阅 检查实时 Ruby 进程 页面。
有用的 Firefox 插件
FireBug 插件
Firebug 插件 允许检查、调试和编辑显示的页面。它具有集成的 CSS 和 DOM 浏览器。对于 Web 开发人员来说,这是必备品!
Screengrab
Screengrab 将显示的页面保存为图像(保存到文件或剪贴板)。在报告布局问题时,非常有用,因为它能够保存完整的页面(即使是当前不可见的部分)。它还可以仅保存可见部分或用户选择的部分。
使用 curl 发送 REST API 请求
在 Web 浏览器中测试 REST API 非常有限,没有 UI(表单),只能发送 GET 请求。无法发送 PUT 或 POST 请求。
但是,我们可以使用 curl 在没有 Web 客户端 UI 的情况下测试 REST API。
身份验证
主要问题是身份验证 - REST API 在任何请求之前都需要登录。
有这些可能性
- 将用户名和密码直接放在每个 curl 命令中
curl -u <user>:<password> https://:8080/services.xml - 仅使用用户名选项,curl 将在终端上询问密码
curl -u <user> https://:8080/services.xml
(这更安全,密码不会存储在 shell 历史记录中,也不会在终端上可见。) - 可能最好的解决方案:登录并将授权 cookie 保存到文件(在本例中为 cookie.txt)
curl -u <user> -c cookie.txt https://:8080/login
然后在所有后续调用中使用 cookie
curl -b cookie.txt https://:8080/services.xml
GET 请求
GET 请求很简单,GET 是默认值。请参阅上一段中的示例。
PUT/POST/DELETE 请求
可以使用 -X PUT 选项发送 PUT 请求,可选地使用 -d 选项后跟参数。
示例 curl -d 'execute=start' -b cookie.txt -X PUT https://:8080/services/ntp.xml
这等效于curl -b cookie.txt -X PUT https://:8080/services/ntp.xml?execute=start
要发送 XML 输入文件,请使用 -H 选项(设置 XML 内容类型),并在 -d 选项中使用 @ 前缀设置输入文件
示例 curl -b cookie.txt -X PUT -H 'Content-type: text/xml' -d @inputfile.xml https://:8080/system
参数也可以设置为 json 格式的参数
示例 curl -b cookie.txt -X PUT -H 'Content-type: text/x-json' -d "{'routes':{'via':'1.2.3.4', 'id':'default'}}" https://:8080/network/routes/default
对于 DELETE 或 POST 请求,只需更改 -X 选项中的参数即可。