Подтвердить что ты не робот

Как вы отлаживаете приложение Sinatra как приложение Rails?

В моем основном контроллере Sinatra я хочу отлаживать хеш params после того, как он POSTED из формы.

Я добавил:

puts params.inspect

и

set :logging, :true

params.inspect работает, если все идет хорошо. Но если ошибка произошла до того, как контроллер будет выполнен, я не получаю никакой информации об ошибке, как по умолчанию в Rails.

Какой лучший способ получить полезную информацию об отладке?

Этот пример вообще не работал (приложение даже не запускалось после добавления этого кода):

configure do 
  Log = Logger.new("sinatra.log")
  Log.level  = Logger::INFO 
end

а затем:

Log.info "#{@users.inspect}"
4b9b3361

Ответ 1

Вы можете попробовать добавить фильтр до фильтра, который выводит параметры

before do
  puts '[Params]'
  p params
end

Ответ 2

Мое мнение таково, что для отладки вы должны использовать configure :development, потому что в этом сценарии включены некоторые флажки отладки. Итак, в вашем блоке configure do вы можете включить флаги:

enable :logging, :dump_errors, :raise_errors

и для вашего средства ведения журнала:

log = File.new("sinatra.log", "a")
STDOUT.reopen(log)
STDERR.reopen(log)

Из справочника Sinatra:

  • Параметр
  • dump_errors определяет, будет ли обратная трассировка сбрасываться до rack.errors, когда исключение возникает из маршрута. Опция включена по умолчанию для приложений верхнего уровня.

  • raise_errors - разрешить исключения для распространения вне приложения (...) Опция :raise_errors по умолчанию отключена для приложений классического стиля и включена по умолчанию для подклассов Sinatra:: Base.

Я также использую

puts "something" + myvar.inspect

в середине моих контроллеров.

Ответ 3

Как говорит @jshen, ruby-debug - очень хороший инструмент - если вы используете Ruby 1.8.

Чтобы использовать его в Синатре, вставьте

require 'ruby-debug/debugger' 

где вы хотите начать отладку.

Ответ 4

Я рекомендую использовать Pry или отладчик Ruby. С помощью Pry вы можете использовать командную строку для прохождения ваших методов и переменных, как в bash.

См. "Как использовать Pry с Sinatra?".

Ответ 5

Чтобы найти лучший способ отладки приложения synatra, я создал репо в github. Самая полезная часть - шаг в метод debug, который выглядит ниже.

enter image description here

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

Ответ 6

Я очень рекомендую использовать ruby-debug для Ruby 1.8. Его очень легко настроить и использовать, когда вы изучите четыре или пять основных команд. Это позволит вам установить точку останова, где вы хотите проверить параметры и поиграть с ними в интерактивном режиме, как в IRB.

Ответ 8

Я предполагаю, что, поскольку вы упомянули свой главный контроллер Sinatra, у вас более одного, что означает, что вы подклассифицируете Sinatra:: Base, а не используете классическое приложение для Sinatra на верхнем уровне. Если это действительно так, многие ошибки обработки по умолчанию, которые Sinatra делает, по умолчанию отключены.

Если вы включили set :show_exceptions, true if development? в определение класса, вы получите дружественные страницы ошибок, которые включают трассировку стека, параметры и т.д., а не только внутреннюю ошибку сервера. Другая опция - set :raise_errors, false, а затем включает блок error do ... end, который будет запускаться всякий раз, когда один из ваших маршрутов вызывает ошибку.

Ответ 9

Я бы порекомендовал использовать гем отладчика для Ruby 1.9.

Чтобы использовать это с приложением Sinatra:

  1. Добавьте драгоценный камень в свой Gemfile

    gem "debugger"
    
  2. Установите драгоценный камень, запустив

    bundle
    
  3. В своем главном файле приложения sinatra добавьте

    require 'debugger'
    
  4. Теперь для отладки вам просто нужно добавить следующую строку

    debugger
    

    в любом месте вашего кода.

Когда код выполняется и отображается debugger, код останавливается, и вы можете просматривать переменные, запускать команды (используя eval) и т.д.

Ответ 10

Рубиновые отладчики в Синатре

Вы можете использовать отладчики Ruby для Sinatra. Основная проблема заключается в том, что вам необходимо знать, какой Ruby Gem используется для какой версии Ruby. Для большинства людей это означает Ruby 2.X и byebug.

Отладчики Ruby от Ruby версии

 Ruby Version   Gem Install      require                add breakpoint
 ---------------------------------------------------------------------
 1.8.X          ruby-debug      'ruby-debug/debugger'   debugger
 1.9.X          debugger        'debugger'              debugger
 2.0.0+         byebug          'byebug'                byebug

Как только вы узнаете, что должны установить гем, укажите его в своем коде, а затем добавьте точки останова, введя ключевое слово. Взяв в качестве примера byebug:

  1. установить: gem install byebug
  2. требуют: require 'byebug'
  3. точка останова: byebug

Дальнейшее чтение

Byebug проект

Byebug руководство по использованию терминального отладчика