编辑: 结果我的初始问题不再准确 - 问题与dataTables gem没有直接关系,我相信这与我的Apache2配置有关。
我似乎遇到了jquery-datatables-rails gem与rails资产管道很好地兼容的问题。
这个问题最初看起来与this one类似,但是从那里解决方案的明显路径并没有愉快地解决问题。
gem在我的Gemfile中,根据railscast episode #340中的指示为我的一个html表安装和实现。使用bundle exec rails s
在开发模式下运行应用程序工作正常,并且所有dataTables功能都显示在站点上没有问题。
当我尝试在生产环境中运行网站时 - 使用capistrano或只是bundle exec rails s -e production
- 在预编译资产之后,不会使用编译的文件,尽管它们都会编译为公共/资产。
在使用config.assets.compile = true
代替预编译时,它似乎也没有显示dataTables功能。 (我相信这两者是对立的,但我可能误解了)
当我进入页面并查看js错误控制台时没有错误,它只是呈现一个计划html表。
我无法弄清楚是什么导致网页不呈现dataTables,而我尝试过的每一次搜索都在上面链接的问题上加上其他五个其他页面一遍又一遍。这些解决方案似乎都不是我的铁杆野兽所渴望的。
你们中的任何人都对问题可能有什么了解吗?
部分相关文件:
app / assets / javascripts / charts.js.coffee:
jQuery ->
$('#charts').dataTable({
"oSearch": {"bSmart": "true", "sSearch": "vdo"}
"iDisplayLength": 50
})
应用程序/资产/ Javascript角/ application.js中
//= require jquery
//= require jquery_ujs
//= require dataTables/jquery.dataTables
//= require_self
//= require_tree .
应用程序/资产/样式表/ application.css
*= require_self
*= require dataTables/jquery.dataTables
*= require_tree .
配置/环境/ production.rb:
PerfGrapher :: Application.configure做
#此处指定的设置优先于config / environment.rb
# Compress JavaScript and CSS
config.assets.compress = true
# make sure to compile js and css assets
config.assets.precompile += %w(*.js *.css)
# Generate digests for assets URLs
config.assets.digest = true
# disable static asset server
config.serve_static_assets = false
config.compile = false
端
答案 0 :(得分:1)
我的application.css.scss文件包含以下行
*= require dataTables/src/demo_table_jui
而不是
*= require dataTables/jquery.dataTables
这可能只是因为我也在使用JQuery UI(使用bJQueryUI:true传递给coffeescript文件中的dataTable())
使用Rails 3.2.6在资产管道中,它在生产中运行良好。
答案 1 :(得分:1)
尝试不在production.rb中定义config.assets.prefix,只是让它采用默认值。这不重要,但不知何故,你会得到一个额外的"公共"在目录路径
中答案 2 :(得分:1)
我是一个可怜的rubyist而且没有railsman(虽然我做groovy grails,是的)。 无论如何,因为你说甚至没有调用警报(嗯,它让我觉得它只是在prod模式)我只是想问它是否有助于看看它是否与rails编译html文件的方式有关 - 因此我本来希望看到html文件,看看是否所有脚本都添加到标题中......
我认为这可能是因为你的chart.js.js被执行时已经加载了dom。
要查看它是否与此相关,请尝试替换
jQuery ->
$('#charts').dataTable({
"oSearch": {"bSmart": "true", "sSearch": "vdo"}
"iDisplayLength": 50
})
类似
imReadyToStart = () ->
$('#charts').dataTable({
"oSearch": {"bSmart": "true", "sSearch": "vdo"}
"iDisplayLength": 50
})
setTimeOut imReadyToStart, 1000