我在一个Rails应用程序中有一个骨干应用程序,该应用程序在本地主机上工作,而不在Heroku上工作。它给了我通常的“抱歉但出了问题”的消息,尽管其他的Rails应用程序在Heroku上工作正常。这只是这个页面特定的主干内容。当它试图渲染主视图时,错误被抛出。
Started GET "/employeedirectory" for 207.230.251.130 at 2013-01-19 23:34:21 +0000
2013-01-19T23:34:21+00:00 app[web.1]: Completed 500 Internal Server Error in 3ms
数据库正在Heroku上工作和播种。实际上,即使在查询之前,错误也会被抛出。我猜它可能是模板系统的设置方式。 index.html.erb页面基本上是空的,除了几个div,模板插入其中。该应用程序使用此实用程序模板加载器(请参阅下面的代码)来加载这些模板在本地主机上,get('templates/...)
中引用的模板取自Rails公用文件夹,但util.js文件本身位于/ assets / javascripts目录中,然后在预编译后将其复制到公用文件夹。我将其推送到Heroku,其结构与Heroku使用的相同,但在资产之后:预编译的内容可能会被更改,我不确定get('templates
是否仍然可以检索这些模板。
这是assets:precompile
之后的公共目录结构。模板位于assets文件夹旁边。
加载模板的Utils.js文件
window.templateLoader = {
load: function(views, callback) {
var deferreds = [];
$.each(views, function(index, view) {
if (window[view]) {
deferreds.push($.get('templates/' + view + '.html', function(data) {
window[view].prototype.template = _.template(data);
}, 'html'));
} else {
alert(view + " not found");
}
});
$.when.apply(null, deferreds).done(callback);
}
};
模板加载器在Backbone应用程序初始化之前加载模板
templateLoader.load(["HomeView", "ContactView", "HeaderView", "EmployeeView", "EmployeeSummaryView", "EmployeeListItemView"],
function () {
app = new Router();
Backbone.history.start();
});
总而言之,如果不是public / templates文件夹,在Rails目录中的哪个位置,我应该将get函数检索到的模板放在这个代码中,以便可以在Heroku上检索它们
$.each(views, function(index, view) {
if (window[view]) {
deferreds.push($.get('templates/' + view + '.html', function(data) {
window[view].prototype.template = _.template(data);
}, 'html'));
} else {
alert(view + " not found");
}
});
如果模板不是问题,那么我可能会有任何其他想法吗?