我被设置为在我的 Heroku Rails 4 应用程序中使用 Gon。 Gon 在暂存 Heroku 应用程序中大约 90% 的时间工作,但在生产 Heroku 应用程序中 100% 的时间失败。在我的控制台中,我收到错误,因为很多人都有:
//javascript console
Uncaught ReferenceError: gon is not defined
有很多建议可以克服这个问题,我已经勉强提出了一个非常不完美的解决方案(#8)。我试过:
将 <%= include_gon %> 放在 application.html.erb 正文中。
将 <%= include_gon %> 放在 application.html.erb 头部。
将 <%= include_gon %> 放在需要它的各个 View 中,而不是放在 application.html.erb 中
将 <%= include_gon %> 放在需要它的各个 View 中,同时将其包含在 application.html.erb 中
是否将 <%= include_gon %> 替换为巧妙的 <%= include_gon if defined? gon && gon.present? %>
从我的 gemfile 中删除 turbolinks 和 jquery-turbolinks,它们无法推送到 Heroku。它们已被替换。
在 javascript 中包装所有与 gon 相关的变量定义: if (gon == defined) { var blah = gon.blah } else { var blah = bleh }
在 application.html.erb 中包含 <%= Gon::Base.render_data({}) %>,并将 javascript 文件的全部内容移动到各自的 View 文件中。不显眼的 javascript 就这么多了。但是这个解决了这个问题。
我不知道如何正确地做到这一点。
如何让“gon”在我的应用中发挥作用?另外,如果有人知道,当它们在代码和 Rails 环境中相同时,为什么它适用于一个 Heroku 应用程序而不适用于另一个应用程序?
更新 我从来没有解决过这个问题。我删除了 Gon 并根据需要用 Ajax 替换了变量。
最佳答案
我发现将此添加到您的标题中很有帮助。
<%= include_gon(:init => true) %>
也适用于 Rails 4。
关于javascript - rails : gon is not defined error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24541445/