Как отладить плагин или гем, используя гем ruby-debug, где часть, которую я хотел отладить, началась с тестовых скриптов? - PullRequest
2 голосов
/ 27 августа 2010

Например, у меня есть этот гем под названием Authlogic-openid, этот плагин устарел, больше не поддерживается и сломан (дайте мне знать, если вы знаете какую-либо альтернативу).

Я хотел убедиться, что тест выполняется, нажав Ctrl + R на vendor / gems / authlogic-oid-1.0.4 / test / acts_as_authentic_test.rb

[Пожалуйста, не пытайтесь попробовать мои шаги ниже, сам драгоценный камень уже был разбит на части, поэтому мне пришлось раньше исправить некоторые пути и необходимые библиотеки ... просто представьте их в своей голове]

Сначала он вернулся

LoadError: no such file to load — ruby-debug

Итак, я прокомментировал строку # 3 в test_helper.rb, которая гласит:

require "ruby-debug"

затем я установил гем ruby-debug с помощью

gem install ruby-debug

Затем я добавил это в environment.rb

  config.gem 'ruby-debug'

Вопрос № 1: Правильны ли мои шаги выше, чтобы начать мой квест отладки Gem?

Хорошо, теперь строка, которую я хотел отладить, находится в строке vendor / gems / authlogic-oid-1.0.4 / lib / authlogic_openid / acts_as_authentic.rb # 157 (или вокруг нее), которая гласит:

  session_class.controller.params[:open_id_complete] && session_class.controller.params[:for_model]

Итак, я набрал "отладчик" поверх него, теперь он читает:

debugger
session_class.controller.params[:open_id_complete] && session_class.controller.params[:for_model]

Затем, когда я снова нажал Ctrl + R на vendor / gems / authlogic-oid-1.0.4 / test / acts_as_authentic_test.rb, я получил такой вывод:

DEPRECATION WARNING: Please update config/database.yml to use 'database' instead of 'dbfile'. (called from parse_sqlite_config! at /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/connection_adapters/sqlite_adapter.rb:35)
Loaded suite /Volumes/Data/work/ror/user_manager/vendor/gems/authlogic-oid-1.0.4/test/acts_as_authentic_test
Started
E 
Finished in 0.009325 seconds.

  1) Error:
test_password_not_required_on_create(ActsAsAuthenticTest):


NoMethodError: undefined method `logger' for true:TrueClass
method debugger in debugger.rb at line 6
method openid_complete? in acts_as_authentic.rb at line 157
method authenticate_with_openid in acts_as_authentic.rb at line 83
method save in acts_as_authentic.rb at line 73
method test_password_not_required_on_create in acts_as_authentic_test.rb at line 16
method __send__ in setup_and_teardown.rb at line 62
method run in setup_and_teardown.rb at line 62

1 tests, 0 assertions, 0 failures, 1 errors

Вопрос № 2: Правильны ли мои шаги для отладки кода? Почему я получил ошибку неопределенного метода 'logger'?

Бонусный вопрос: почему я получаю это предупреждение об устаревании? Как это исправить?

Мой файл database.yml выглядит следующим образом:

# MySQL.  Versions 4.1 and 5.0 are recommended.
#
# Install the MySQL driver:
#   gem install mysql
# On Mac OS X:
#   sudo gem install mysql -- --with-mysql-dir=/usr/local/mysql
# On Mac OS X Leopard:
#   sudo env ARCHFLAGS="-arch i386" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config
#       This sets the ARCHFLAGS environment variable to your native architecture
# On Windows:
#   gem install mysql
#       Choose the win32 build.
#       Install MySQL and put its /bin directory on your path.
#
# And be sure to use new-style password hashing:
#   http://dev.mysql.com/doc/refman/5.0/en/old-client.html
development:
  adapter: mysql
  encoding: utf8
  reconnect: false
  database: user_manager_development
  pool: 5
  username: root
  password: oisadj
  socket: /tmp/mysql.sock

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  adapter: mysql
  encoding: utf8
  reconnect: false
  database: user_manager_test
  pool: 5
  username: root
  password: oisadj
  socket: /tmp/mysql.sock

production:
  adapter: mysql
  encoding: utf8
  reconnect: false
  database: user_manager_production
  pool: 5
  username: root
  password: 
  socket: /tmp/mysql.sock

Спасибо!

1 Ответ

1 голос
/ 27 августа 2010

Попробуйте запустить тестовый сервер с флагом --debugger.

Из файла README Rails:

Поддержка отладчика доступна через команду отладчика при запуске Mongrel.или сервер Webrick с --debugger.Это означает, что вы можете прервать выполнение в любой точке кода, исследовать и изменить модель, а затем возобновить выполнение!Вам нужно установить ruby-debug , чтобы запустить сервер в режиме отладки.Для gems используйте 'gem install ruby-debug'.


Относительно предупреждения об устаревании.

УСТРАНЕНИЕ ПРЕДУПРЕЖДЕНИЕ.'database' вместо 'dbfile'.

Кажется, вы используете SQLite.Вам просто нужно заменить строку dbfile в config/database.yml на database, и предупреждение должно исчезнуть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...