ruby-on-rails - Ruby on Rails 页面最初是空白的,但在刷新时正确加载

标签 ruby-on-rails

  • http://do.starterpad.com - 主页加载正常
  • 尝试单击任何页脚链接(联系人、Starters、Startups 等)并注意该页面无法加载
  • 单击浏览器中的 F5 或重新加载按钮,并注意它现在可以正常加载

  • 这很奇怪。有任何想法吗?

    我还应该注意到,它在我们开发人员的本地机器上运行良好,只是在实时站点中运行不正常。

    最佳答案

    这个问题几乎肯定是 Turbolinks 的问题。

    Turbolinks 问题的典型定义是,如果它仅在您单击链接时发生(即“不刷新”),它将是由 Turboinks 引起的。我马上解释为什么,但首先,让我们看看问题是什么:

    错误

    我点击了页脚链接,页面确实变成了空白

    有趣的是,它向我展示了 <body>该页面的元素已被删除:

    enter image description here

    现在这几乎可以肯定是 Turbolinks 错误(我将在下面解释)。那么是什么原因造成的呢?

    可能有多种原因 - 但一个突出的原因是您包含了 <script>直接在您的 <body> 中标记元素:

    enter image description here

    我相信这可能是问题所在。要么这个,要么还没有结束你的</body>正确标记,将导致 Turbolinks 困惑。解决这个问题的方法是让您的 Javascript unobtrusive ,让您确保您的所有标签都井井有条

    所以这是我修复它的方法:

    ——

    修复

    首先,将您的 Javascript 放入您的 asset pipeline :

    #app/assets/javascripts/application.js
    //Pikwik
    var pikwik = function() {
       var pkBaseURL = (("https:" == document.location.protocol) ? "https://statsbox.info/" : "http://statsbox.info/");
    
        document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E"));
    
        try {
           var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", 25);
           piwikTracker.trackPageView();
           piwikTracker.enableLinkTracking();
        } catch( err ) {}
    };
    
    $(document).on("page:load ready", pikwik);
    

    为混合 JQuery 和 JS 道歉 - 我觉得强调你需要让它只在请求开始时加载的事实是正确的。查看 PikWik 代码本身,它似乎会附加一个 script标记到您的页面 - 这意味着如果您希望它与 Turbolinks 一起使用,则必须在页面加载过程的一开始就完成

    这将与您一起确保您拥有 </body>标签正确关闭

    Turbolinks

    为了让您了解 Turbolinks 出现问题的原因,您需要考虑它是如何工作的:

    Turbolinks makes following links in your web application faster. Instead of letting the browser recompile the JavaScript and CSS between each page change, it keeps the current page instance alive and replaces only the body and the title in the head. Think CGI vs persistent process.



    这基本上意味着每次使用 Turbolinks 加载页面时,它只会加载 <body>新页面的标签,留下<head>完整。

    问题在于,如果您在 <body> 中的任何一个中有任何动态脚本,您希望加载的标签,它会导致冲突。这就是我认为这里发生的事情 - 您可以通过上述建议解决

    关于ruby-on-rails - Ruby on Rails 页面最初是空白的,但在刷新时正确加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25463144/

    相关文章:

    ruby-on-rails - Rails - 用于集合集的单选按钮

    mysql - 你如何通过关系获得 Rails has_many 来处理 has_many 条件?

    ruby-on-rails - 如何解决 Bundler 中的 Gem 兼容问题?

    ruby-on-rails - Rails 4 - 将变量传递给部分

    javascript - 获取 jQuery timeago 插件以识别新加载的 DOM 元素

    ruby-on-rails - 无法在全新安装的 Rails 上创建新应用

    ruby-on-rails - 与 ActiveRecord 中的属性的自引用关联

    mysql - 从Rails 3中的ActiveRecord查询MySQL中的一个月或一周的日期

    ruby-on-rails - 使用 Carrierwave 在 Heroku 上上传大文件

    ruby-on-rails - 是否值得开始学习 Rails 2 还是我应该等到 Rails 3 的书籍可用?