【问题标题】:Why is javascript not working on deployment to heroku?为什么javascript不能部署到heroku?
【发布时间】:2012-06-08 17:54:02
【问题描述】:

将 Rails 应用程序部署到 Heroku 后,没有任何 javascript 函数在工作。

文件似乎已经编译(尽管在缩小的文件中不容易看到)。

找出javascript为什么不工作的逻辑步骤是什么(它在生产中工作正常)。

谢谢

【问题讨论】:

  • 哪个版本的rails和哪个heroku堆栈?如果您使用的是 rails 3.1+,我相信您应该使用 heroku cedar stack
  • 您好。我在 Cedar 上使用 Rails 3.2 和 Postgres 9 beta

标签: ruby-on-rails heroku


【解决方案1】:

此问题与资产管道有关。你应该编译资产。

为了解决它, 在 config/environments/production.rb 中将 config.assets.compress 设置为 true,

  config.assets.compress = true

然后运行RAILS_ENV=production bundle exec rake assets:precompile .

再次推送代码。

【讨论】:

  • 感谢沙密斯。我的配置中已经有assets.compress=true。 Heroku 似乎正在部署时进行预编译。至少,有这样的日志消息。不过我会试试你的bundle exec 建议,看看效果如何。
  • 在 slug 编译期间是否失败?
  • 只是添加颜色来说明为什么需要此解决方案。来自 Rails 资产管道文档:“使用资产预编译(生产默认值)时,您需要确保在每页加载控制器资产时对其进行预编译。默认情况下,.coffee 和 .scss 文件不会被自行预编译。”来自:guides.rubyonrails.org/…
【解决方案2】:

有时我会因为资产管道和我对它的误解而遇到问题。所以我所做的只是为了确保正确打包东西只是在页面加载时发出一个简单的警报(将它放在一些用户无法访问的随机页面上,等等)

alert('some-unique-string')

将代码推送到服务器。然后在 chrome 中打开页面并使用开发工具,转到“脚本”选项卡。从那里您可以搜索字符串some-unique-string,因为您的字符串文字不会被缩小。如果您没有看到,那么您知道您的 javascript 由于某种原因没有被包含在内。

这至少会给你一个起点。

【讨论】:

  • dty,js 肯定在编译,alert('some-unique-string') 出现在源代码中。但它没有运行。为什么会这样?
  • 顺便说一句,如果我在视图文件中定义一个 js 函数,它就可以工作。例如,
  • 好的,我认为这是由于 2 个问题。首先,application.js 中的脚本顺序产生了一个我在开发环境中没有发现的错误。其次,我有不想包含在清单中的脚本。我在特定页面上使用它,它需要转到页面底部。我目前在供应商/资产中有这个文件,并且在部署时使用 javascript_include_tag 我得到一个模板错误,js 没有预编译。这个文件应该放在哪里,我应该怎么称呼它?
  • 好的,我最终解决了这个问题。你是对的,问题是我对资产管道的理解和假设。困惑,但开始看到光明:) 谢谢!
  • 我遇到了类似的问题并尝试了这个。警报弹出,然后其他一切也都起作用了。我删除了警报,一切仍然有效。不知道为什么。可能与 heroku 的编译方式有关?
猜你喜欢
  • 2023-04-08
  • 2021-04-13
  • 2015-03-10
  • 2017-03-12
  • 2015-06-06
  • 2020-04-12
  • 1970-01-01
  • 1970-01-01
  • 2021-07-09
相关资源
最近更新 更多