如何解决Rails环境的区别?适用于暂存,但不适用于开发

时间:2013-10-06 18:50:37

标签: ruby-on-rails backbone.js

我在更大的Rails应用程序中的backbone.js应用程序中有仪表板。在登台和制作(在heroku上),仪表板工作正常。

但是,在我的本地Pow dev环境中,当我尝试查看特定的仪表板时,我在浏览器控制台中收到以下错误:

Uncaught TypeError: Object #<Object> has no method 'merge' 

在跟踪了一下之后,这就是我想出来的。错误消息中引用的合并方法来自呈现的/assets/templates/dashboard/details.js文件。以下是浏览器在第5行开头调用错误的代码:helpers = this.merge ...:

(function() {
  this.HandlebarsTemplates || (this.HandlebarsTemplates = {});
  this.HandlebarsTemplates["dashboard/details"] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
  this.compilerInfo = [4,'>= 1.0.0'];
helpers = this.merge(helpers, Handlebars.helpers); data = data || {};
  var buffer = "", stack1, functionType="function", escapeExpression=this.escapeExpression;
  buffer += "<p>\n  <b>Name:</b>\n  <span class='editable' data-attribute-name='name'>";
  if (stack1 = helpers.name) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
  else { stack1 = depth0.name; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
  buffer += escapeExpression(stack1)
    + "</span>\n</p>\n<p>\n  <b>Description:</b>\n  <span class='editable' data-attribute-name='description'>";
  if (stack1 = helpers.description) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
  else { stack1 = depth0.description; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
  buffer += escapeExpression(stack1)
    + "</span>\n</p>\n<p>\n  <button class='add_module'>Add module</button>\n</p>\n";
  return buffer;
  });
  return this.HandlebarsTemplates["dashboard/details"];
}).call(this);

我认为这是一个Rails预编译或资产管道设置问题,因为它在分段和生产中工作正常但在本地开发中失败。

很难将任何更改推送到heroku来测试它们。任何解决此问题的建议都表示赞赏。

1 个答案:

答案 0 :(得分:0)

看起来这是因为我的把手版本过时了。感谢Thoughtbot的帮助追踪这个问题。

https://github.com/wycats/handlebars.js/issues/547