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にプッシュしましたが、assets:precompileの後で変更される可能性があり、get('templates
それでもそれらのテンプレートを取得できるかどうかはわかりません。
これは、の後のパブリックディレクトリ構造assets:precompile
です。テンプレートはアセットフォルダの隣にあります。
テンプレートをロードする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");
}
});
テンプレートが問題ではない場合、誰かが私が見るかもしれない他のアイデアを持っていますか?