2012-02-24 57 views
1

在heroku雪松上部署后,图像desapear。在Heroku Cedar上部署Rails 3.1.3后的图像desapears

我已经像一个CSS:

:css 
    /* */ 
    table.table thead .sorting { background: url('assets/datatables/sort_both.png') no-repeat center right; } 
    table.table thead .sorting_asc { background: url('assets/datatables/sort_asc.png') no-repeat center right; } 
    table.table thead .sorting_desc { background: url('assets/datatables/sort_desc.png') no-repeat center right; } 
    /* */ 
    table.table thead .sorting_asc_disabled { background: url('assets/datatables/sort_asc_disabled.png') no-repeat center right; } 
    table.table thead .sorting_desc_disabled { background: url('assets/datatables/sort_desc_disabled.png') no-repeat center right; } 

和相对PNG到app/assets/images/datatables/本地工作,但不是在Heroku。

我也可以使用= asset_tag('datatables/icon.png') ...,但如何在CSS内部做到这一点?

我也试过config.action_dispatch.x_sendfile_header = nilconfig/environments/production.rb没有成功。

回答

3

在生产环境中,资产将在其URL中附加MD5指纹。使用资产路径助手以便使用正确的文件名是很重要的。

看来您正在使用Haml,基于:css过滤器。

在Haml的,可以估算出红宝石进入doucment与#{ ruby }

:css 
    table.table thead .sorting { background-image: url(#{ asset_path('datatables/sort_both.png')}) } 
    ... and so on. 

如果您正在使用的Sass/SCSS,您可以使用内置的资产帮手。

table.table thead .sorting { 
    background-image: asset-url('datatables/sort_both.png'); 
} 

如果您使用的是纯CSS,它会更复杂一点。您需要将.erb附加到css文件。 (资产/样式表/ file.css.erb')

table.table thead .sorting { 
    background-image: url(<%= asset_path('datatables/sort_both.png') %>); 
} 

您应该使用无礼或SCSS。它最干净最瘦。

+0

很好的解释fullsailor。谢谢 – 2012-02-25 08:09:54

+0

嘿,谢谢你的回答。有没有类似的助手在.js.coffee文件中引用它?我正在使用jQuery来插入包含我直接使用url引用的图像的html,以及所附散列(由Heroku)的b/c,图像不显示。再次感谢。 – jackerman09 2013-10-14 14:51:38

2

我刚刚得到它自己的工作。

的关键是把这个线在你的application.rb中:

config.assets.initialize_on_precompile = false 

您使用的是jquery-datatables-rails宝石?如果没有,你应该!把这一行在你的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。为您的控制器咖啡文件,你正在使用的数据表中:

如果您使用的流体容器:

#// 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" 
});