【问题标题】:Compiled Javascript not Working in Production Mode编译的 Javascript 在生产模式下不起作用
【发布时间】:2015-10-13 00:02:26
【问题描述】:

我正在本地机器上构建一个应用程序。当我在生产模式下预编译并运行它时,编译的 javascript 停止工作。具体来说,我在 assets 文件夹中的一个咖啡脚本文件和 application.js 中有 javascript。所有其他 javascript(即 ajax 形式的 jquery 等)继续工作,这就是为什么我认为它必须与编译有关。

这是我的 application.js 文件:

//= require jquery
//= require jquery_ujs
//= require jquery-ui/autocomplete
//= require jquery-ui/dialog
//= require autocomplete-rails
//= require dresssed
//= require raphael
//= require morris
//= require best_in_place
//= require_tree .

$('.label-stock-health').popover({ html : true});

$(document).keypress(function(e) {
    if ($('.search-bar').length){
      if($(".search-bar").is(":visible")) {

      } else {
        $(".search-bar").show();
        $("#q_name_cont").focus();
      }
    }

});

$("#spinner").hide();

$(document).ajaxStart(function() {
    $("#spinner").fadeIn('slow');
  }).ajaxStop(function() {
      $("#spinner").hide();
  });

$(document).ready(function() {
        $(".show-search").click(function(){
        if ($('.search-bar').length){
            $(".search-bar").toggle();
          }
        });
        $(".best_in_place").best_in_place();
});

此功能在开发模式下仍然有效。此外,如果我将 javascript 硬编码到我的布局模板中,它将起作用。但如果没有硬编码,它就不会。

关于可能是罪魁祸首的任何建议?如果不是,调试此问题的最佳方法是什么?

更新 #1 我在 Chrome 开发人员工具的 Javascript 控制台中看到的仅有的两个错误发布在下面。它们还显示在我的 localhost 开发实例上,我的 javascript 功能在其中充分发挥作用。

需要未捕获的 Google Maps API。请注册以下 JavaScript 库 http://maps.google.com/maps/api/js?sensor=true.(anonymous函数)@ 应用程序-6ab26aa5fc5d647a3b5543af7c9838a6.js:9t.(匿名 功能) @ application-6ab26aa5fc5d647a3b5543af7c9838a6.js:9(匿名函数) @ application-6ab26aa5fc5d647a3b5543af7c9838a6.js:9 变体:565 GET http://www.example.com/bootstrap/glyphicons-halflings-regular.woff2 404(未找到)

【问题讨论】:

  • 第 1 步:向我们提供错误信息。
  • 嗨,我发布了我在上面的 chrome 开发人员工具中看到的错误,但都与非工作功能无关。有任何想法吗?感谢您的帮助。
  • 具体是什么停止了工作?你的问题有很多猜测。尽可能具体,我相信你会得到你正在寻找的帮助。
  • 好的,我在上面添加了更多细节,包括不再有效的代码。谢谢
  • 你试过 RAILS_ENV=production bundle exec rake assets:precompile

标签: javascript ruby-on-rails heroku


【解决方案1】:

我确实在 upwork.com 上给你写过它是怎么回事...如果它在本地主机上工作,但是当在线上传时停止工作,那就是权限问题。我在 godady 和 blue 主机中遇到了同样的问题。尝试使用权限。对于(在蓝色主机上)工作权限设置为 5 5 4. 或 5 5 5 我记错了。一旦你弄清楚它们应该是什么,如何删除所有并重新上传新权限。

【讨论】:

  • 似乎 javascript 正在被提供给页面,因此我不确定这是否相关(我在 Chrome Javascript 控制台中没有看到任何 404 或其他错误)。
  • (匿名函数)通常会因为权限而失败,至少在我的经验中是这样。试试吧,修复 java 脚本文件的权限,以及正在使用它的文件,包括通过 ajax 调用处理的文件
【解决方案2】:

这里的罪魁祸首是popover线,如果你想使用它,你需要包含popover插件。将其注释掉并部署您的代码,它将重新开始工作。

【讨论】:

  • 我尝试注释掉所有 popover 行的实例,但没有解决问题。无论如何,我相信 popover 功能是通过 Dresssed 包含的,它是一个引导框架。
【解决方案3】:

我刚刚也向您发送了一条关于 upwork 的消息,但您应该检查从您的 application.js 文件中删除 turbolinks 是否可以解决问题:

 //= require jquery
 //= require jquery_ujs
 //= require turbolinks ** remove this line as turbolinks interferes with javascript occasionally.
 //= require_tree .

【讨论】:

  • 谢谢,但我很久以前就删除了。还有其他想法吗?
  • 认为问题可能出在你的资产是如何编译的,如果不是一个简单的错误隐藏在你所有的 JS 中。您是否尝试过在 Chrome 中使用 DevTools 控制台,并查看 jQuery 是否正确加载?或者正如其他人所说,您是否将资产捆绑在生产中? IE。 heroku 运行 rake 资产:预编译
  • 我确实在生产环境中捆绑了我的资产,但仍然无法正常工作。奇怪的是,如果我尝试输入 javascript:$(".search-bar").show();在我的浏览器中,该功能仍然无法正常工作,但是 jquery 的某些元素正在工作。例如,我有一些调用 .js.erb 文件的远程表单并且它们工作正常。这可能是一个线索吗?
【解决方案4】:

请包含另一个文件名 custom.js 和更新

$(document).ajaxStart(function() {
       $("#spinner").fadeIn('slow');
 });
$(document).ajaxStop(function() {
     $("#spinner").hide();
 });

【讨论】:

  • 这背后的原因是什么? application.js 和 custom.js 有什么区别?
  • 有时 heroku 缺少树下的行,因此它是创建另一个 js 的更好方法。如果您看到第一行错误,您将丢失冒号或括号之类的内容。
  • 请将 heroku 错误粘贴到你得到它的地方。我会给你确切的答案。在heroku上部署时,我也多次遇到这种类型的错误。
猜你喜欢
  • 2013-02-16
  • 1970-01-01
  • 2022-01-13
  • 1970-01-01
  • 2022-10-07
  • 2012-01-02
  • 2020-09-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多