【问题标题】:Precompiling rails-3 assets pipeline, makes javascript failing, preventing heroku deploy预编译 rails-3 资产管道,使 javascript 失败,阻止 heroku 部署
【发布时间】:2012-05-08 14:34:38
【问题描述】:

我在 rails-3.2.3/bootstrap 应用程序上使用 datatables js 对表格的字段进行排序。

如果我在本地运行应用程序而不预编译资产管道,它可以正常工作,但是一旦我运行:

RAILS_ENV=production bundle exec rake assets:precompile

生成的 public/assets 会阻止 DataTables 插件工作,即使它正确打包到 public/assets/manifest.yml 文件和 public/assets 目录中:

lsoave@ubuntu:~/rails/github/gitwatcher$ ls -l app/assets/javascripts
total 84
-rw-rw-r-- 1 lsoave lsoave   553 2012-04-27 21:36 application.js
-rw-rw-r-- 1 lsoave lsoave    99 2012-04-20 21:37 bootstrap.js.coffee
-rw-rw-r-- 1 lsoave lsoave  3387 2012-04-26 20:12 DT_bootstrap.js
-rw-rw-r-- 1 lsoave lsoave 71947 2012-04-26 20:12 jquery.dataTables.min.js
lsoave@ubuntu:~/rails/github/gitwatcher$ 

两个 application.js 看起来都不错:

app/assets/javascripts/application.js:

//= require jquery
//= require jquery_ujs
//= require twitter/bootstrap
//= require DT_bootstrap
//= require jquery.dataTables.min
//= require_tree .

当然,这更成问题,因为它会阻止 rails 应用程序在 heroku 上运行(我可以从头开始编译应用程序,或者使用本地预编译的版本,但它们无论如何都不起作用)。

我该怎么办?

【问题讨论】:

  • 手动包含所有文件后为什么要调用//= require_tree
  • ...不,你没有,我错误地在尝试一次后忘记了它。无论如何,它肯定不会停止任何事情......删除它之后,管道仍然会破坏 DataTables js

标签: javascript ruby-on-rails ruby heroku asset-pipeline


【解决方案1】:

我自己也弄好了。你在使用jquery-datatables-rails gem 吗?如果没有,你应该!将此行放入您的 gemfile:

gem 'jquery-datatables-rails', github: 'rweng/jquery-datatables-rails'

然后运行:

捆绑安装

注意:不要将它放在您的资产组中,否则在部署到 heroku 时它将不起作用(因为资产组未在生产中使用)。

另外,请确保将此行放入您的 application.rb:

config.assets.initialize_on_precompile = false

将这些添加到您的 application.js

//= require dataTables/jquery.dataTables
//= require dataTables/jquery.dataTables.bootstrap

将此添加到您的 application.css:

 *= require dataTables/jquery.dataTables.bootstrap

并将其添加到您正在使用数据表的控制器的 js.coffee 文件中:

如果您使用流体容器:

#// For fluid containers
$('#dashboard').dataTable({
  "sDom": "<'row-fluid'<'span6'l><'span6'f>r>t<'row-fluid'<'span6'i><'span6'p>>",
  "sPaginationType": "bootstrap"
});

如果您使用的是固定宽度的容器:

#// For fixed width containers
$('.datatable').dataTable({
  "sDom": "<'row'<'span6'l><'span6'f>r>t<'row'<'span6'i><'span6'p>>",
  "sPaginationType": "bootstrap"
});

【讨论】:

  • PS:这种方法可以让您部署到heroku,而无需先在本地预编译资产。我发现在本地预编译资产很麻烦。
  • 我们有 2 个 jquery-datatables-rails gem,一个是 github.com/kclair/jquery-datatables-rails 另一个是 github.com/rweng/jquery-datatables-rails 你用的是哪一个?
  • github.com/rweng/jquery-datatables-rails
  • 感谢 Luca 的提问——我更新了上面的答案,将这一行放入 gemfile:gem 'jquery-datatables-rails',github:'rweng/jquery-datatables-rails'跨度>
  • 伟大的提示在这里艾拉,它工作正常。我不知道该怎么感谢你!
【解决方案2】:

这可能有几个原因不起作用。最好的选择是从这里开始:

http://www.neilmiddleton.com/heroku-asset-pipeline-faq/

【讨论】:

  • 是的,已经完成了。我尝试了提到的不同方式,但这会破坏本地资产管道,也在我的机器上,甚至在部署之前。
猜你喜欢
  • 1970-01-01
  • 2022-01-26
  • 2021-04-06
  • 1970-01-01
  • 2021-11-12
  • 2014-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多