Как использовать Прай с Синатрой? - PullRequest
35 голосов
/ 24 августа 2011

Я пишу свое первое приложение на Sinatra и хотел бы использовать Pry для проверки / отладки некоторых вещей, происходящих в приложении. Я и раньше не использовал Прай, но хотел бы попробовать. Как мне начать использовать Pry с моим приложением Sinatra?

Ответы [ 4 ]

51 голосов
/ 24 августа 2011

Сводка

  1. Используйте require 'pry' в верхней части приложения.
  2. Вызывайте binding.pry в своем коде всякий раз, когда вы хотите перейти в интерактивный сеанс.Для получения информации об использовании Pry см. Включение IRB на его голове с помощью Pry и Pry wiki .
  3. Когда вы закончите с определенным интерактивным сеансом, введите exit или Ctrl-D;Sinatra возобновит работу с того места, где остановился.

Пример

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.

6 голосов
/ 04 апреля 2014

Загрузка приложения в сеанс 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.

4 голосов
/ 26 мая 2013

Я предпочитаю pry-отладчик.Однако есть еще хитрость в том, что вы не можете прыгнуть, когда вы запускаете sinatra в классическом стиле.

Чтобы найти лучший способ отладки приложения sinatra, я создал репозиторий на github, который выглядит ниже.

enter image description here

Вот репо: https://github.com/hlee/sinatra_debugger_example

0 голосов
/ 21 января 2019

Мой предпочтительный метод также 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. Это означает, что мне совсем не нужно менять код, чтобы попасть в него.

...