2010-09-13 52 views
2

我正在开发一个Rails应用程序,它有一堆(数百个)托管在S3服务器上的图像。有喜欢这里IMAGE_TAG点的帮手,我不得不这样通过配置/环境/ development.rb test.rb和production.rb添加到:Rails:一台服务器上的图像,另一台服务器上的CSS和Javascript上的图像

config.action_controller.asset_host = "http://mybucket.s3.amazonaws.com" 

然而,这也意味着它看起来有对CSS和Javascript。这是一个巨大的痛苦,因为每次我改变CSS我都必须重新上传到亚马逊。

所以..有没有一种简单的方法,我可以让我的应用程序看起来像亚马逊的图像,但本地的CSS/JavaScript?

(我用Rails 3.0)

回答

6

您可以将Proc对象传递给config.action_controller.asset_host,让它在运行时以编程方式确定结果。

config.action_controller.asset_host = Proc.new do |source| 
    case source 
    when /^\/(images|videos|audios)/ 
    "http://mybucket.s3.amazonaws.com" 
    else 
    "http://mydomain.com" 
    end 
end 

但保持原样,这将给你http://mybucket.s3.amazonaws.com/images/whatever.png当您使用image_tag :whatever

如果要修改路径,以及,你可以做config.action_controller.asset_path

config.action_controller.asset_path = Proc.new do |path| 
    path.sub /^\/(images|videos|audios)/, "" 
end 

非常类似的东西,这将使你http://mybucket.s3.amazonaws.com/whatever.png与前者相结合。

0

没有什么从通过完整的URL image_tag阻止你:image_tag("#{IMAGE_ROOT}/icon.png")

但对我来说,移动静态图像(图标,背景等)到S3和留在轨道上stylesheets/js文件听起来有点不一致。你可以把它们全部移到S3或者设置Apache进行缓存(如果你担心用户拉大图像会给Rails造成太多的开销)。

顺便说一句,您不必将config.action_controller...放到所有三种环境的配置文件中:将该行放置在config/environment.rb中将具有相同的效果。

+0

我想过要做IMAGE_ROOT,但它看起来不太干。而本地的css只是为了开发。最终他们都会在S3 – dpieri 2010-09-13 21:44:56

+0

@ pieri434为什么你没有图像和样式表在本地进行开发? Amazon S3控制台应该允许您轻松导出图像。 – 2010-09-13 21:49:34

相关问题