0

我正在使用 assets_sync gem 将我的资产同步到 S3 存储桶。在生产中我想使用 S3,在开发中我想使用我的本地文件。所以我已经设置了以下内容和一个助手

环境/开发.rb

configure :development do 
  set :asset_host, "/" 
end

环境/生产.rb

configure :production do 
  set :asset_host, "https://s3-eu-west-1.amazonaws.com/#{ENV['FOG_DIRECTORY']}" 
end

帮手

helpers do
  def aws_asset( path )
    File.join settings.asset_host, path
  end
end

所以在我看来我可以做到这一点

<%= image_tag( aws_asset "/assets/images/wd.png") %>

如果在开发中,这将导致从我的本地资产中渲染该图像,或者在生产中时从我的存储桶中渲染该图像

那么如果我想从我的 main.css 文件中渲染一个图像,比如背景图像呢?例如,我不能执行以下操作,因为它不是 erb 文件

main.css

header{
   background: #ffffff url('<%= aws_asset("/assets/images/bgwRpeat.png") %>') repeat-x;
}

那么我能做什么呢?有没有人这样做过

感谢任何人都可以提供的任何帮助

4

1 回答 1

1

想到了3种方法。

预编译资产

在部署之前,预编译资产和 CSS。如果你创建一个名为的文件main.css.erb,然后通过 ERB 运行它来生成main.css它,那么它里面就会有正确的东西。这将是我的偏好。预编译的方法有很多,我更喜欢Guard而不是 YMMV。


编辑:

Guard::Erb 文档中提升和扭曲

guard 'erb', :input => 'app/views/stylesheets/main.css.erb', :output => "public/assets/stylesheets/main.css" do
  watch (%r{app/views/stylesheets/main.css.erb})
end

类似的东西。


创建一个路由,然后编译资产

这类似于您在 Sinatra 中使用 SASS 模板的方式(如果您不预编译它们)。只需与上面相同,设置路由,通过 ERBmain.css运行模板并提供它。main.css.erb添加大量缓存


编辑:

get "/assets/stylesheets/main.css" do
  # remember to look at caching
  erb :"stylesheets/main.css"
end

我开始写作,但我不记得第三个了 :) 在我的辩护中,我头疼得厉害。也许其他人会为我记住。

于 2013-06-23T15:38:40.330 回答