我正在使用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;
}
那我该怎么办?有没有人在此之前完成此任务
感谢任何人提供的任何帮助
答案 0 :(得分:1)
有三种想法。
在部署之前,预编译资产和CSS。如果您创建一个名为main.css.erb
的文件,然后通过ERB运行它来生成main.css
,那么它将拥有正确的内容。这是我的偏好。有很多方法可以预编译,我更喜欢Guard但是YMMV。
编辑:
抬起并扭曲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
我开始写作,我不记得第三次了:)在我的辩护中,我头疼得厉害。也许其他人会为我记住。