【发布时间】:2014-01-20 17:44:43
【问题描述】:
我似乎遇到了一些关于 JS 和 Heroku 的长期问题。虽然不完全——我的一些 JS 工作,但不是全部。
我在application.js中有以下内容:
//= require jquery
//= require jquery_ujs
//= require bootstrap
//= require_tree .
function submitForm(pagenamed, starttime, endtime) {
alert("checked the button - worked");
$.ajax({
type:'POST',
url: '/pagetimes/create',
data: $.param({ pagetime: {pagename: pagenamed, start: starttime, end: endtime }}),
async:false
});
}
var d = new Date();
var starttime = d.getTime();
var pagename = document.URL
alert("load works START:" +d+ starttime + pagename);
window.onbeforeunload=function() {
var j = new Date();
var endtime = j.getTime();
alert("unload works START:" +d+ starttime +"END:"+j+ endtime +pagename );
$.ajax({
type:'POST',
url: '/pagetimes/create',
data: $.param({ pagetime: {pagename: pagename, start: starttime, end: endtime }}),
async:false
});
}
正如您可能猜到的那样,这是一个 JS,它通过向 create 操作发送 AJAX 调用(所有这些都无需用户输入)来捕获在页面上花费的时间并将其记录在模型(页面时间)下。我仍在开发中,所以我留下了一堆警报,以便在函数被触发时向我展示。还有一个函数,我可以使用一个按钮调用它,它有效地做同样的事情(我在构建它时如何调试 AJAX 调用)。所有这些都可以在 localhost(开发)中无缝运行,但只有按钮在 Heroku 上的生产环境中有效。即使考虑到这一点,onload 和 onbeforeunload 操作也会在预期时在 Heroku 上触发(我收到警报,与开发中的完全相同),但我的数据库中没有显示任何内容。对这里出了什么问题有任何想法吗?
关于预编译资产然后推送到 Heroku,或调整 production.rb 或 application.rb 文件中的各种选项,有很多答案,但尝试了很多都无济于事。还有一些答案报告了application.js 文件中//=... 行的排序问题(与引导程序有关),我也尝试过,但又没有。
它一定与我在事件函数中声明的变量或async:none 选项有关?否则我没有想法。我对 localhost 和 heroku 应用程序使用相同的浏览器。有什么明显的我可能会丢失吗?使用 Rails 3,Win7,没有花哨的宝石。
更新 1:
我发现以下内容:JavaScript not loading on Heroku but works locally 这听起来与我的问题非常相似。会是这样吗?
更新 2:
我在警报中包含了 pagename 变量,以查看它是否无法正常工作。不是问题,正确的信息出现在警报中。还使按钮和onbeforeunload async 选项相同,以防万一。不是。现在,关于这些 ajax 调用的所有内容都完全相同,但一个有效,另一个无效。什么给了?
【问题讨论】:
-
我在那里使用它们只是为了在警报中向我显示它们已正确传递到
onbeforeunload事件中;它们在onload事件之外声明,以便在那里可以访问它们(否则它们不是)。基本上这只是调试的残余,所以我可以确保事情被正确传递。 -
我已经将我的代码更新到上述内容,但我仍然遇到同样的问题:在 localhost 上完美运行(动作触发和数据发布到 db),动作在 Heroku 中触发,但没有任何内容发布到我的数据库.
-
你有预编译你的资产吗?
-
是的,预编译对我没有任何作用...
标签: javascript ruby-on-rails ajax ruby-on-rails-3 heroku