Есть ли способ показать номера строк Ruby в javascript, сгенерированном Opal

В целях отладки я хотел бы видеть соответствующую позицию источника Ruby в файле javascript, сгенерированном Opal.

Есть ли простой способ добиться этого? Я старался

# config.ru
require 'bundler'
Bundler.require

run Opal::Server.new { |s|

  s.append_path 'public'
  s.append_path 'src'
  s.debug = true
  s.source_map = true

  s.main = 'application'

  s.index_path = 'index_opal.html'
}

это мой файл приложения

требуется «математика» требуется «опал» требуется «опал-jquery»

require 'consolelogger'
require 'harpnotes'
require 'abc_to_harpnotes'
require 'opal-raphael'
require 'opal-jspdf'
require 'opal-jszip'
require 'opal-abcjs'
require 'opal-musicaljs'
require 'raphael_engine'
require 'pdf_engine'
require 'controller'
require 'harpnote_player'
require 'text_pane'

puts "now starting zupfnoter"
puts "zupfnoter

Я вижу этот файл только в исходных картах, но не в тех, которые включены в «require».

Я даже могу установить брейкпины на путы в конце, но больше нигде.


person Bernhard    schedule 14.06.2014    source источник
comment
Вы пробовали с исходными картами?   -  person Elia Schito    schedule 15.06.2014
comment
Я пытался, но тоже не смог заставить его работать. Я все еще ищу своего рода поваренную книгу, как заставить это работать.   -  person Bernhard    schedule 23.06.2014
comment
Я вижу, что они работают в Rails с Chrome, но не с Safari (не уверен насчет Firefox). Какая у вас установка?   -  person Elia Schito    schedule 05.07.2014
comment
Я использую в основном хром. desc Создайте наше приложение для build.js. Задача :build do env = Opal::Environment.new env.append_path . File.open(build.js, w+) сделать |out| out ‹‹ env[application].to_s end end   -  person Bernhard    schedule 06.07.2014
comment
Я использую в основном хром. Я создаю файл JS с таким оператором: env = Opal::Environment.new; out << env["application"].to_s. Где application.rb требует всех остальных файлов rb. Я надеюсь, что для установки Opal::Environment есть выбор, но я не могу его найти. Я пробовал source_map = true на Opal::Server без успеха   -  person Bernhard    schedule 06.07.2014
comment
У меня есть application.rb, который требует других источников Ruby. Заявления в application.RB отображаются в исходной карте, а содержимое необходимых файлов — нет.   -  person Bernhard    schedule 01.08.2014


Ответы (1)


Вот пример того, как настроить стойку, которая правильно обслуживает исходные карты.

https://github.com/opal/opal/tree/0-6-stable/examples/rack (Opal v0.6.x)


ОБНОВЛЕНИЕ: проблема, похоже, в том, что вы не находитесь в режиме отладки.

Объяснение. Текущая реализация исходных карт не работает с объединенными активами, а Sprockets изначально не поддерживает исходные карты, поэтому не сохраняет их во время объединения.

Режим отладки Sprockets с Opal и Rack

Чтобы включить режим отладки, вам нужно добавить debug = true и использовать Erb index.html в Opal::Server:

# config.ru

run Opal::Server.new do |s|
  s.append_path 'src'
  s.source_map = true
  s.main = 'application'
  s.index_path = 'index.html.erb'
  s.debug = true
end

то в вашем index.html.erb вам нужно использовать помощник вместо жестко заданного тега сценария:

<%# index.html.erb %>
…
<%= javascript_include_tag 'application' %>
…
person Elia Schito    schedule 11.07.2014
comment
Спасибо за подсказку. Я попробовал, но ничего не увидел ни в исходной карте, ни в файле ruby ​​ни в инструментах разработчика, ни в Chrome, ни в Firefox. - person Bernhard; 13.07.2014
comment
Каждый JS-файл имеет свою исходную карту, URL-адрес которой вы можете найти в конце скомпилированного файла в виде специального комментария. Видишь специальный комментарий? - person Elia Schito; 03.08.2014
comment
вот что я там вижу: //# sourceMappingURL=/__opal_source_maps__/application.js.map ; . Но я не вижу файл application.js.map в __opal_source_maps__. Я даже вижу много подобных комментариев в application.js перед каждым определением класса. Но __opal_source_maps__ содержит только один файл application, который на самом деле имеет то же содержимое, что и application.rb. - person Bernhard; 04.08.2014
comment
когда я ввожу этот URL, например. http://localhost:9292/__opal_source_maps__/controller.js.map в адресной строке браузера, то я вижу много загадочных вещей, таких как исходная карта. Поэтому сервер opal вроде бы доставляет исходные карты, но я понятия не имею, как их использовать в хроме. Я ожидал увидеть там исходный код ruby ​​и иметь возможность устанавливать точки останова. - person Bernhard; 04.08.2014
comment
Хорошо, возможно, у вас отключен режим отладки в конвейере ресурсов? Текущая реализация исходных карт не работает с конкатенированными ресурсами (это также связано с тем, что конвейер ресурсов не исходные карты изначально не поддерживаются). - person Elia Schito; 04.08.2014
comment
Навскидку такое может быть. Я добавил строку на config.ru (начальные вопросы показывают мой текущий config.ru): s.debug=true(Я видел это в github.com/opal/opal-rspec). Но это не имеет никакого эффекта, все как было раньше. - person Bernhard; 04.08.2014
comment
Можете ли вы поделиться проектом или его частью со мной, чтобы я мог попробовать локально? (Я elia на GitHub и _elia на BitBucket.) В качестве альтернативы, правильно ли ведет себя пример стойки? - person Elia Schito; 04.08.2014
comment
Давайте продолжим обсуждение в чате. - person Bernhard; 04.08.2014
comment
В частности, ‹%= javascript_include_tag 'application' %› гарантирует, что javascript не объединяется, а предоставляется как отдельные активы. Отличный ответ. - person Bernhard; 04.08.2014