JQuery已经(大部分)停止了在Rails上的工作——资产管道是罪魁祸首吗?
接下来,我有了DataTables,一个JQuery插件,在我的Rails 3.2.9应用程序中运行良好 然后它突然停止了工作。(也就是说,这些表现在只呈现为纯HTML。)我不知道是什么变化导致了破坏,我也不知道发生了什么。)可以吗 JQuery似乎加载正常,因为我存储在JQuery已经(大部分)停止了在Rails上的工作——资产管道是罪魁祸首吗?,jquery,ruby-on-rails,datatables,asset-pipeline,Jquery,Ruby On Rails,Datatables,Asset Pipeline,接下来,我有了DataTables,一个JQuery插件,在我的Rails 3.2.9应用程序中运行良好 然后它突然停止了工作。(也就是说,这些表现在只呈现为纯HTML。)我不知道是什么变化导致了破坏,我也不知道发生了什么。)可以吗 JQuery似乎加载正常,因为我存储在/app/assets/javascripts/nospam.js中的这个脚本正在执行它在DataTables失败的同一页面上的预期操作: $(window).load(function() { $('#my-email')
/app/assets/javascripts/nospam.js
中的这个脚本正在执行它在DataTables失败的同一页面上的预期操作:
$(window).load(function() {
$('#my-email').html(function(){
var e = "steven";
var a = "@";
var d = "testivate";
var c = ".com";
var h = 'mailto:' + e + a + d + c;
$(this).parent('a').attr('href', h);
return e + a + d + c;
});
});
当我在Chrome中加载页面并转到View>Developer>JavaScript Console>Console时,我看到一个UncaughtTypeError:Object[Object Object Object]没有方法“dataTable”
连接到包含脚本中带有return
的行时出错:
(function() {
jQuery(function() {
return $('#areas').dataTable({
bJQueryUI: true
});
});
}).call(this);
资产管道似乎正在加载所有正确的文件,因为它生成:
<!DOCTYPE html>
<html>
<head>
<title>Testivate</title>
<!--[if lt IE 9]>
<script src="/assets/html5shiv-printshiv.js?body=1" type="text/javascript"></script>
<![endif]-->
<script src="/assets/jquery.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery_ujs.js?body=1" type="text/javascript"></script>
<script src="/assets/dataTables/jquery.dataTables.js?body=1" type="text/javascript"></script>
<script src="/assets/areas.js?body=1" type="text/javascript"></script>
<script src="/assets/assignments.js?body=1" type="text/javascript"></script>
<script src="/assets/categories.js?body=1" type="text/javascript"></script>
<script src="/assets/heuristics.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery.placeholder.min.js?body=1" type="text/javascript"></script>
<script src="/assets/nospam.js?body=1" type="text/javascript"></script>
<script src="/assets/reports.js?body=1" type="text/javascript"></script>
<script src="/assets/application.js?body=1" type="text/javascript"></script>
<link href="/assets/application.css?body=1" media="screen" rel="stylesheet" type="text/css" />
<link href="/assets/jquery.ui.core.css?body=1" media="screen" rel="stylesheet" type="text/css" />
<link href="/assets/jquery.ui.theme.css?body=1" media="screen" rel="stylesheet" type="text/css" />
<link href="/assets/dataTables/src/demo_table_jui.css?body=1" media="screen" rel="stylesheet" type="text/css" />
<link href="/assets/_base.css?body=1" media="screen" rel="stylesheet" type="text/css" />
<link href="/assets/ie.css?body=1" media="screen" rel="stylesheet" type="text/css" />
<link href="/assets/ie6.css?body=1" media="screen" rel="stylesheet" type="text/css" />
<link href="/assets/print.css?body=1" media="screen" rel="stylesheet" type="text/css" />
<link href="/assets/screen.css?body=1" media="screen" rel="stylesheet" type="text/css" />
<link href="http://fonts.googleapis.com/css?family=Rokkitt:400,700" media="screen" rel="stylesheet" type="text/css" />
<link href="http://fonts.googleapis.com/css?family=Open+Sans:400italic,400" media="screen" rel="stylesheet" type="text/css" />
<meta content="authenticity_token" name="csrf-param" />
<meta content="Rss5Hf9sPcQQQRViXgEUfSxvYEshBukjV96gM5+cEYc=" name="csrf-token" />
<meta content='jq8ezzUss-fo-h7ml8zmwSvdpmzJlbE6VjN7Dphcnp8' name='google-site-verification'>
</head>
/app/assets/javascripts/areas.js.coffee:
//= require jquery
//= require jquery_ujs
//= require dataTables/jquery.dataTables
//= require_tree .
jQuery ->
$('#areas').dataTable
bJQueryUI: true
%table.display#areas
%thead
%tr
%td Foo
%td Bar
%tbody
%tr
%td Foo
%td Bar
gem "compass"
gem "sass"
gem "sass-rails"
gem "haml"
gem "haml-rails"
gem "susy"
gem "jquery-rails"
gem "html5shiv-rails"
gem "normalize-rails"
group :assets do
gem "sass-rails"
gem "coffee-rails"
gem "compass-rails"
gem "compass-susy-plugin"
gem "fancy-buttons"
gem 'jquery-datatables-rails', github: 'rweng/jquery-datatables-rails'
gem "jquery-ui-rails"
gem "uglifier"
end
if defined?(Bundler)
Bundler.require *Rails.groups(:assets => %w(development test))
end
module Testivate
class Application < Rails::Application
config.assets.enabled = true
config.assets.version = '1.0'
end
end
Testivate::Application.configure do
config.assets.compress = false
config.assets.debug = true
end
/app/views/areas/index.html.haml:
//= require jquery
//= require jquery_ujs
//= require dataTables/jquery.dataTables
//= require_tree .
jQuery ->
$('#areas').dataTable
bJQueryUI: true
%table.display#areas
%thead
%tr
%td Foo
%td Bar
%tbody
%tr
%td Foo
%td Bar
gem "compass"
gem "sass"
gem "sass-rails"
gem "haml"
gem "haml-rails"
gem "susy"
gem "jquery-rails"
gem "html5shiv-rails"
gem "normalize-rails"
group :assets do
gem "sass-rails"
gem "coffee-rails"
gem "compass-rails"
gem "compass-susy-plugin"
gem "fancy-buttons"
gem 'jquery-datatables-rails', github: 'rweng/jquery-datatables-rails'
gem "jquery-ui-rails"
gem "uglifier"
end
if defined?(Bundler)
Bundler.require *Rails.groups(:assets => %w(development test))
end
module Testivate
class Application < Rails::Application
config.assets.enabled = true
config.assets.version = '1.0'
end
end
Testivate::Application.configure do
config.assets.compress = false
config.assets.debug = true
end
Gemfile:
//= require jquery
//= require jquery_ujs
//= require dataTables/jquery.dataTables
//= require_tree .
jQuery ->
$('#areas').dataTable
bJQueryUI: true
%table.display#areas
%thead
%tr
%td Foo
%td Bar
%tbody
%tr
%td Foo
%td Bar
gem "compass"
gem "sass"
gem "sass-rails"
gem "haml"
gem "haml-rails"
gem "susy"
gem "jquery-rails"
gem "html5shiv-rails"
gem "normalize-rails"
group :assets do
gem "sass-rails"
gem "coffee-rails"
gem "compass-rails"
gem "compass-susy-plugin"
gem "fancy-buttons"
gem 'jquery-datatables-rails', github: 'rweng/jquery-datatables-rails'
gem "jquery-ui-rails"
gem "uglifier"
end
if defined?(Bundler)
Bundler.require *Rails.groups(:assets => %w(development test))
end
module Testivate
class Application < Rails::Application
config.assets.enabled = true
config.assets.version = '1.0'
end
end
Testivate::Application.configure do
config.assets.compress = false
config.assets.debug = true
end
/config/application.rb:
//= require jquery
//= require jquery_ujs
//= require dataTables/jquery.dataTables
//= require_tree .
jQuery ->
$('#areas').dataTable
bJQueryUI: true
%table.display#areas
%thead
%tr
%td Foo
%td Bar
%tbody
%tr
%td Foo
%td Bar
gem "compass"
gem "sass"
gem "sass-rails"
gem "haml"
gem "haml-rails"
gem "susy"
gem "jquery-rails"
gem "html5shiv-rails"
gem "normalize-rails"
group :assets do
gem "sass-rails"
gem "coffee-rails"
gem "compass-rails"
gem "compass-susy-plugin"
gem "fancy-buttons"
gem 'jquery-datatables-rails', github: 'rweng/jquery-datatables-rails'
gem "jquery-ui-rails"
gem "uglifier"
end
if defined?(Bundler)
Bundler.require *Rails.groups(:assets => %w(development test))
end
module Testivate
class Application < Rails::Application
config.assets.enabled = true
config.assets.version = '1.0'
end
end
Testivate::Application.configure do
config.assets.compress = false
config.assets.debug = true
end
在Chrome中使用相同的开发工具。单击网络并检查/assets/dataTables/jquery.dataTables.js?body=1是否正在加载。问题确实出在资产管道上。它正在加载JQuery的两个副本,因为我已经预编译了资产以将其推送到生产环境中,但是预编译的版本在本地挂起,并与动态编译的版本一起提供服务。现在,为了解决如何阻止这种情况发生…最初,网络选项卡是空的。当我点击刷新时,出现了一个下载列表。在“jquery.dataTables.js”行中,它说:Method:GET;状态:304/未修改;类型:Application/JavaScript;发起人:报告8/解析器;尺寸:252B;时间:596M答案是在推送到Heroku之前不需要在本地预编译您的资产,如果您不需要,Heroku将在生成slug时尝试在服务器上为您预编译它们。美好的