gpt4 book ai didi

ruby-on-rails - Heroku 预编译破坏了我的 JavaScript。没有预编译它会给出 500 服务器错误?

转载 作者:数据小太阳 更新时间:2023-10-29 08:09:42 24 4
gpt4 key购买 nike

我刚刚在我的应用程序中包含了一个 javascript,它将激活一个图像 slider 。这是脚本:

    $(function(){var scroller=$("#scroller div.innerScrollArea");var scrollerContent=scroller.children("ul");scrollerContent.children().clone().appendTo(scrollerContent);var curX=0;scrollerContent.children().each(function(){var $this=$(this);$this.css("left",curX);curX+=$this.width()});var fullW=curX/2;var viewportW=scroller.width();var controller={curSpeed:0,fullSpeed:2};var $controller=$(controller);var tweenToNewSpeed=function(newSpeed,duration){if(duration===undefined){duration=600}$controller.stop(true).animate({curSpeed:newSpeed},duration)};scroller.hover(function(){tweenToNewSpeed(0)},function(){tweenToNewSpeed(controller.fullSpeed)});var doScroll=function(){var curX=scroller.scrollLeft();var newX=curX+controller.curSpeed;if(newX>fullW*2-viewportW){newX-=fullW}scroller.scrollLeft(newX)};setInterval(doScroll,20);tweenToNewSpeed(controller.fullSpeed)});

我手动缩小了它。如果我只是将这个应用程序上传到 Heroku,它会给我一个 500 内部服务器错误。在 Heroku 日志中,我可以看到:

    2013-01-02T04:50:59+00:00 app[web.1]: Completed 500 Internal Server Error in 640ms
2013-01-02T04:50:59+00:00 app[web.1]:
2013-01-02T04:50:59+00:00 app[web.1]: ActionView::Template::Error (slider.js isn't precompiled):
2013-01-02T04:50:59+00:00 app[web.1]: 1: <footer class="footer">
2013-01-02T04:50:59+00:00 app[web.1]: 2: <%= javascript_include_tag "slider" %>
2013-01-02T04:50:59+00:00 app[web.1]: 3: </footer>

因此,我通过将以下行添加到 production.rb 来添加要预编译的 javascript:

 config.assets.precompile += %w( slider.js )

有了它,我的应用程序加载了,但 javascript 没有工作。当我检查源代码时,我看到 Heroku 如何编译我的 javascript:

$(function(){var a=$("#scroller div.innerScrollArea"),b=a.children("ul");b.children().clone().appendTo(b);var c=0;b.children().each(function(){var a=$(this);a.css("left",c),c+=a.width()});var d=c/2,e=a.width(),f={curSpeed:0,fullSpeed:2},g=$(f),h=function(a,b){b===undefined&&(b=600),g.stop(!0).animate({curSpeed:a},b)};a.hover(function(){h(0)},function(){h(f.fullSpeed)});var i=function(){var b=a.scrollLeft(),c=b+f.curSpeed;c>d*2-e&&(c-=d),a.scrollLeft(c)};setInterval(i,20),h(f.fullSpeed)});

一团糟。我的问题是,如何解决这个问题?我需要 heroku 来编译我的其他脚本和 css 文件。但是只排除这个文件。怎么做?

最佳答案

与其让 Heroku 预编译 Assets ,许多人认为在推送之前自己预编译 Assets 是更好的做法。这使您有机会在本地检查已编译的 Assets ,并修复可能发生的任何错误,然后再将您知道有效的内容推送到 Heroku。

您可以在您的存储库中执行此操作:

rake assets:precompile

并清除任何现有的预编译 Assets (在预编译之前运行它的良好做法):

rake assets:clean

至于“乱七八糟”,实际发生的是缩小器将变量名换成了更短的变量名。多年来,这一直是缩小器的正常行为,不太可能(但有可能)它破坏了某些东西。有理由在本地预编译 Assets 并测试是否是问题所在。

关于ruby-on-rails - Heroku 预编译破坏了我的 JavaScript。没有预编译它会给出 500 服务器错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14117037/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com