Heroku和Rails 4:一些javascript无法正常工作

wiw*_*978 2 javascript ruby-on-rails heroku ruby-on-rails-4

我正在尝试在Heroku Rails 4应用程序上显示一个javascript项目.在我的本地开发机器上,一切都运行得很好.无法让它在Heroku上运行.

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

<%= javascript_include_tag "application" %>
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

<script type="text/javascript">
   alert('Displays OK')
</script>
Run Code Online (Sandbox Code Playgroud)

调用,这在Heroku(以及我的本地机器)上显示正常.

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

<script src="/assets/application-6da332d35efc3706e98f87ead9900f20.js">
Run Code Online (Sandbox Code Playgroud)

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

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

<script src="/assets/timeline.js?body=1"></script>
<script src="/assets/timeline.min.js?body=1"></script>
Run Code Online (Sandbox Code Playgroud)

事实上,在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>
Run Code Online (Sandbox Code Playgroud)

我在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
Run Code Online (Sandbox Code Playgroud)

希望有人可以帮助我.这已经困扰了我几天了.任何帮助赞赏.谢谢!

Yan*_*ERY 5

我认为你需要指定timeline.js必须预编译.在config/environments/production.rb上,添加以下内容:

config.assets.precompile += %w( timeline.js )
Run Code Online (Sandbox Code Playgroud)

在您查看中,包括您的时间轴js:

<%= javascript_include_tag "timeline" %>
Run Code Online (Sandbox Code Playgroud)