AWS提供CSS图像Sinatra

时间:2013-06-22 20:20:06

标签: ruby amazon-s3 sinatra assets

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

环境/ development.rb

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

环境/ production.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;
}

那我该怎么办?有没有人在此之前完成此任务

感谢任何人提供的任何帮助

1 个答案:

答案 0 :(得分:1)

有三种想法。

预编译资产

在部署之前,预编译资产和CSS。如果您创建一个名为main.css.erb的文件,然后通过ERB运行它来生成main.css,那么它将拥有正确的内容。这是我的偏好。有很多方法可以预编译,我更喜欢Guard但是YMMV。


编辑:

Guard::Erb docs

抬起并扭曲
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模板的方式类似(如果您不预先编译它们)。与上面相同,为main.css设置路线,通过ERB运行main.css.erb模板并提供服务。添加大量caching


编辑:

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

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