升级到Rails 4后,把手资产没有用ember-rails编译

时间:2013-04-03 21:36:37

标签: ember.js asset-pipeline handlebars.js ruby-on-rails-4 ember-rails

我在前端有一个带Ember的Rails应用程序。今天,我升级到Rails 4,我唯一无法解决的问题是我的Handlebars模板没有被编译或作为资产包含(在开发模式下)。我没有收到任何错误消息。

我生成了一个全新的Rails 4测试应用程序并安装了Ember,它可以很好地提供Handlebars文件。测试应用中的所有宝石都存在于我的应用中。我试过运行rake rails:upgrade,但没有效果。我尝试修改ember-rails源以输出日志消息,测试应用程序和我的应用程序的消息和执行路径相同。

我要求模板的方式与以往一样:

require_tree ./templates

我尝试使用ember-rails 0.11.1和Github master,没有运气。

相关宝石版本:

  * 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       对象{}

我能够从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包含应用程序/ assets / javascripts文件夹。

非常感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:4)

我已将其缩小到ember-rail的engine.rb文件中的以下块。对于我的应用程序,它是在Sprockets上发送register_engine,而不是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中的railties顺序足以解决问题。我相信其他一些引擎正在清除Sprockets配置,因此通过稍后在此过程中加载Ember :: Rails引擎,我能够解决这个问题。

config.railties_order = [:main_app, :all, Ember::Rails::Engine]