Ответ 1
Вы можете попробовать добавить фильтр до фильтра, который выводит параметры
before do
puts '[Params]'
p params
end
В моем основном контроллере 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}"
Вы можете попробовать добавить фильтр до фильтра, который выводит параметры
before do
puts '[Params]'
p params
end
Мое мнение таково, что для отладки вы должны использовать 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
в середине моих контроллеров.
Как говорит @jshen, ruby-debug - очень хороший инструмент - если вы используете Ruby 1.8.
Чтобы использовать его в Синатре, вставьте
require 'ruby-debug/debugger'
где вы хотите начать отладку.
Я рекомендую использовать Pry или отладчик Ruby. С помощью Pry вы можете использовать командную строку для прохождения ваших методов и переменных, как в bash.
Чтобы найти лучший способ отладки приложения synatra, я создал репо в github. Самая полезная часть - шаг в метод debug, который выглядит ниже.
Я очень рекомендую использовать ruby-debug для Ruby 1.8. Его очень легко настроить и использовать, когда вы изучите четыре или пять основных команд. Это позволит вам установить точку останова, где вы хотите проверить параметры и поиграть с ними в интерактивном режиме, как в IRB.
Задумывались ли вы о том, чтобы попробовать что-то вроде этой статьи: http://www.gittr.com/index.php/archive/logging-with-sinatra-and-passenger-another-try/
Я предполагаю, что, поскольку вы упомянули свой главный контроллер Sinatra, у вас более одного, что означает, что вы подклассифицируете Sinatra:: Base, а не используете классическое приложение для Sinatra на верхнем уровне. Если это действительно так, многие ошибки обработки по умолчанию, которые Sinatra делает, по умолчанию отключены.
Если вы включили set :show_exceptions, true if development?
в определение класса, вы получите дружественные страницы ошибок, которые включают трассировку стека, параметры и т.д., а не только внутреннюю ошибку сервера. Другая опция - set :raise_errors, false
, а затем включает блок error do ... end
, который будет запускаться всякий раз, когда один из ваших маршрутов вызывает ошибку.
Я бы порекомендовал использовать гем отладчика для Ruby 1.9.
Чтобы использовать это с приложением Sinatra:
Добавьте драгоценный камень в свой Gemfile
gem "debugger"
Установите драгоценный камень, запустив
bundle
В своем главном файле приложения sinatra добавьте
require 'debugger'
Теперь для отладки вам просто нужно добавить следующую строку
debugger
в любом месте вашего кода.
Когда код выполняется и отображается debugger
, код останавливается, и вы можете просматривать переменные, запускать команды (используя eval
) и т.д.
Вы можете использовать отладчики Ruby для Sinatra. Основная проблема заключается в том, что вам необходимо знать, какой Ruby Gem используется для какой версии Ruby. Для большинства людей это означает Ruby 2.X и byebug.
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:
gem install byebug
require 'byebug'
byebug