Как использовать Прай с Синатрой?
Я пишу свое первое приложение на Sinatra и хотел бы использовать Pry для проверки / отладки некоторых вещей, происходящих в приложении. Я и раньше не использовал Прай, но хотел бы попробовать. Как мне начать использовать Pry с моим приложением Sinatra?
3 ответа
Резюме
- использование
require 'pry'
в верхней части вашего приложения. - Вызов
binding.pry
в вашем коде всякий раз, когда вы хотите зайти в интерактивный сеанс. Для получения информации об использовании Pry см. Включение IRB на его голове с помощью Pry и Pry wiki. - Когда вы закончите с определенным интерактивным сеансом, введите
exit
или Ctrl-D; Синатра возобновит бег с того места, где остановился.
пример
require 'sinatra'
require 'pry'
get '/' do
@cats = rand(100)
html = haml :index
binding.pry
html
end
__END__
@@index
%html
<head><title>Hello World</title></head>
%body
%p I have #{@cats} cat#{:s unless @cats==1}!
Вот как это выглядит, когда я запускаю веб-сервер:
C:\>ruby pry_into_sinatra.rb
== Sinatra/1.2.6 has taken the stage on 4567 for development with backup from Thin
>> Thin web server (v1.2.11 codename Bat-Shit Crazy)
>> Maximum connections set to 1024
>> Listening on 0.0.0.0:4567, CTRL+C to stop
Когда я делаю запрос в веб-браузере по http://localhost:4567/, консоль заходит в отладчик Pry перед отправкой результата:
From: pry_into_sinatra.rb @ line 7 in Sinatra::Application#HEAD /:
2: require 'pry'
3:
4: get '/' do
5: @cats = rand(100)
6: html = haml :index
=> 7: binding.pry
8: html
9: end
10:
11: __END__
12: @@index
pry(#<Sinatra::Application:0x3300ac8>)> @cats
=> 42
pry(#<Sinatra::Application:0x3300ac8>)> puts html
<html>
<head><title>Hello World</title></head>
<body>
<p>I have 42 cats!</p>
</body>
</html>
=> nil
pry(#<Sinatra::Application:0x3300ac8>)> exit
127.0.0.1 - - [24/Aug/2011 13:25:57] "GET / HTTP/1.1" 200 96 28.5390
127.0.0.1 - - [24/Aug/2011 13:25:57] "GET /favicon.ico HTTP/1.1" 404 447 0.0010
Дальнейшая отладка
Если вы хотите использовать традиционные команды отладки, такие как установка точек останова на основе строки, или пошаговое выполнение, или прерывание при возникновении исключений, см. Библиотеку PryDebug от Mon-Ouie.
Загрузите приложение в сеанс Pry:
Взгляни на свой config.ru
, Если это выглядит примерно так:
require File.join(File.dirname(__FILE__), 'config', 'application.rb')
Вы можете загрузить свое приложение в Pry, используя
bundle exec pry -I . -r config/application.rb
# where -I . adds current dir to load path
# and -r is the file you want to require
Это может быть сделано с любым модулем или классом, пока встречаются зависимости.
Посмотрите на этот шпаргалку Pry для продвинутых примеров использования Pry.
Я предпочитаю pry-отладчик. Однако есть еще хитрость в том, что вы не можете прыгнуть, когда вы запускаете sinatra в классическом стиле.
Чтобы найти лучший способ отладки приложения sinatra, я создал репозиторий на github, который выглядит ниже.
Мой предпочтительный метод также Pry, но немного отличается от выше. В одном из первых файлов для запуска в процессе, скажем, config.ru
или spec/spec_helper.rb
:
if ENV["DEBUG"]
require 'pry-byebug'
# and any other Pry extensions etc
binding.pry
end
Затем, если я хочу использовать отладку, я запускаю env DEBUG=1 bin/rackup config.ru
или же env DEBUG=1 bin/rspec
(Я часто использую это с -e
включите RSpec), а затем установите точки останова, используя break
, Это означает, что мне совсем не нужно менять код, чтобы попасть в него.