Rails:一台服务器上的图像,另一台服务器上的CSS和Javascript

dpi*_*eri 2 ruby-on-rails

我正在开发一个rails应用程序,它有一堆(数百)图像托管在S3服务器上.要让像image_tag这样的帮助器指向这里,我必须通过config/environments/development.rb test.rb和production.rb添加它:

config.action_controller.asset_host = "http://mybucket.s3.amazonaws.com"
Run Code Online (Sandbox Code Playgroud)

但是,这也意味着它在那里寻找CSS和Javascript.这是一个巨大的痛苦,因为每次我更改CSS时我都必须将其重新上传到亚马逊.

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

(我正在使用Rails 3.0)

edg*_*ner 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
Run Code Online (Sandbox Code Playgroud)

但保持原样,这会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
Run Code Online (Sandbox Code Playgroud)

这会让你http://mybucket.s3.amazonaws.com/whatever.png与前者相结合.