2

我正在尝试在 Heroku Rails 4 applicarion 上显示一个 javascript 项目。在我的本地开发机器上,一切运行良好。无法让它在 Heroku 上工作。

在我的 application.html.erb 文件中,我添加了:

<%= javascript_include_tag "application" %>

在另一个视图文件(events.html.erb)中,我有:

<script type="text/javascript">
   $(document).ready(function()
   ...code to add data to a timeline using getjson()...
</script>`

这是指 assets>javascripts 文件夹中的 timeline.js 文件。添加事件时(使用 Rails CRUD 操作,javascript 代码调用 getJson() 方法并将事件添加到时间线。这在本地机器上按预期工作。

当我推送到 Heroku 时,我可以通过 rails 添加事件,但不显示时间线。

我最初的想法是 Heroku 上没有加载 Javascript,因此我添加了一个简单的:

<script type="text/javascript">
   alert('Displays OK')
</script>

调用,这在 Heroku(以及我的本地机器)上显示得很好。

在 Heroku 上查看页面源时,我可以看到:

<script src="/assets/application-6da332d35efc3706e98f87ead9900f20.js">

所以看起来timeline.js文件是预编译的(它似乎是时间线js的最小化版本)。

在我的本地机器上,我没有看到预编译的 js 文件,但我看到了:

<script src="/assets/timeline.js?body=1"></script>
<script src="/assets/timeline.min.js?body=1"></script>

在 Heroku 上,它显示 javascript 警报,但不显示时间线,这似乎表明预编译中的 javascript 代码有问题。

我在heroku日志中看不到任何明显的东西。它说 slug 编译已成功完成,我看不到错误消息。

有没有办法可以强制 Heroku 不使用预编译的 js 文件,所以我可以在 Heroku 上使用:

   <script src="/assets/timeline.js?body=1"></script>
   <script src="/assets/timeline.min.js?body=1"></script>

我在 production.rb 文件中有以下内容:

config.serve_static_assets = false
config.assets.js_compressor = :uglifier
config.assets.compile = true
config.assets.compress = true
config.assets.digest = true
config.assets.debug = false

希望有人可以帮助我。这几天一直困扰着我。任何帮助表示赞赏。谢谢!

4

1 回答 1

5

我认为您需要指定必须预编译timeline.js。在 config/environments/production.rb 中,添加:

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

在您看来,包括时间轴 js:

<%= javascript_include_tag "timeline" %>
于 2013-08-27T15:55:43.697 回答