Актив руля не компилируется с тлеющими углами после обновления до Rails 4

У меня есть приложение Rails с Ember на фронтэнде. Сегодня я обновился до Rails 4, и единственная проблема, которую я не могу решить, это то, что мои шаблоны Handlebars не компилируются или не включаются в качестве ресурса (в режиме разработки). Я не получаю никаких сообщений об ошибках.

Я сгенерировал новое тестовое приложение Rails 4 и установил Ember, и он отлично работает с файлами Handlebars. Все драгоценные камни в тестовом приложении присутствуют в моем приложении. Я пробовал бегать rake rails:upgradeи это не имело никакого эффекта. Я попытался изменить источник ember-rails для вывода сообщений журнала, и сообщения и пути выполнения были одинаковыми для тестового приложения и моего приложения.

Я требую шаблоны так же, как я всегда делал:

require_tree ./templates

Я попытался использовать ember-rails 0.11.1 и от мастера Github, но не повезло.

Связанные версии драгоценных камней:

  * ember-data-source (0.0.5)
  * ember-rails (0.11.1 4dc902b)
  * ember-source (1.0.0.rc2.0)
  * sprockets (2.9.0)
  * sprockets-rails (2.0.0.rc3)
  * barber (0.4.1)
  • Все шаблоны находятся в app/assets/javascripts/templates и все используют расширение.handlebars. Хотя я тоже пробовал.hbs и.js.hjs.

Из консоли Chrome:

Ember.TEMPLATES Object {}

Я могу вручную скомпилировать ресурсы из командной строки Rails следующим образом:

environment = Sprockets::Environment.new
environment.append_path 'app/assets/javascripts'
a = environment['templates/test.handlebars']
a.to_s => "..compiled template.."

И двигатель зарегистрирован:

environment.engines
=> {..".handlebars"=>Ember::Handlebars::Template..}

Rails.application.config.assets.paths включает папку app / assets / javascripts, как и должно быть.

Любая помощь с этим будет принята с благодарностью, спасибо!

1 ответ

Я сузил его до следующего блока в файле engine.rb ember-rail. Для моего приложения это отправка register_engine на Sprockets, а не app.assets. В новом тестовом приложении Rails 4 он тоже делал это. Однако в моем приложении, когда я заставляю выполнение использовать app.assets, шаблоны руля компилируются.

Я считаю, что с тех пор, как мое приложение было обновлено с Rails 3, где-то не хватает конфигурации для правильного использования Sprockets. Я выложу больше, когда узнаю.

 initializer "ember_rails.setup", :after => :append_assets_path, :group => :all do |app|
    sprockets = if ::Rails::VERSION::MAJOR == 4
      Sprockets.respond_to?('register_engine') ? Sprockets : app.assets
    else
      app.assets
    end

    sprockets.register_engine '.handlebars', Ember::Handlebars::Template
    sprockets.register_engine '.hbs', Ember::Handlebars::Template
    sprockets.register_engine '.hjs', Ember::Handlebars::Template
  end

ОБНОВЛЕНИЕ: Для меня изменение порядка рельсов в application.rb было достаточно, чтобы решить проблему. Я считаю, что какой-то другой движок очищал конфигурацию Sprockets, поэтому, загрузив движок Ember::Rails позднее, я смог обойти эту проблему.

config.railties_order = [:main_app, :all, Ember::Rails::Engine]
Другие вопросы по тегам