使用 image_tag 从根渲染图像
Rendering images from root with image_tag
我的根 'root/tmp/database/*.JPG' 中有一个文件夹,我想在我的视图中显示 image_tag
。
我目前的代码是:
<% @images.each do |image| %>
<%= image_tag image.file, class: "img-responsive" %>
<% end %>
但是因为 image_tag
使用资产管道,它将图像渲染为:
'/images/tmp/database/xotter-1.jpg'
所以我的问题是,我是否可以使用 image_tag
并将图像呈现为:'/tmp/database/*.JPG'
您网站中提供的所有资源(图片、css、js 等)都需要来自 public 文件夹内的某个位置。但是,public 文件夹可以包含指向其他文件夹的 符号 links,即快捷方式。
因此,例如,如果您想提供来自 #{Rails.root}/tmp/database
的文件,您可以像这样创建一个符号 link:
#from your application folder
cd public
ln -s ../tmp/database database
您现在应该在 public 文件夹中看到 database
文件夹,并且可以 link 使用 url
"/database/xotter-1.jpg"
对应于
处的文件
#{Rails.root}/public/database/xotter-1.jpg
这些说明假设您使用的是 bash 风格的命令行 shell,例如 linux 或 mac os。如果您在 windows 中,您可能需要以不同方式设置快捷方式。
编辑:关于显示文件夹中所有图像的后续问题的答案。
假设您有一个文件夹 #{Rails.root}/public/database
,并且您想要在其中找到所有 jpg 文件:您可以通过多种方式来实现。我喜欢 Dir[]
,与 File.join
一起使用(这是生成占 extra/missing 斜杠的文件路径的安全方法,否则很容易出错)例如
jpg_files = Dir[File.join("public/database", "*.jpg")]
=> ["public/database/foo.jpg", "public/database/bar.jpg"]
请注意,这些路径都是相对于命令的来源 运行 的,在 rails 服务器或控制台的情况下,是 rails 应用程序文件夹。
如果你想 link 这些,你需要相对于 public 文件夹的路径,你可以说
filename.gsub("public","")
=> "/database/foo.jpg"
所以,为了将它们结合在一起,在您的模板中:
<% Dir[File.join("public/database", "*.jpg")).each do |file| %>
<%= image_tag file.gsub("public",""), class: "img-responsive" %>
<% end %>
只是为了添加到 Max Williams
' 史诗般的答案,如果您用图像填充 public
文件夹(而不是 tmp
),您将能够使用 built-in asset_path
helpers:
Computes the path to asset in public directory
asset_path "database/xotter-1.jpg" #-> /public/assets/database/xotter-1.jpg"
我明白这意味着您必须使用 assets
子目录,但这是有充分理由的...
--
预编译
就个人而言,我会将图像放入您应用程序的 assets/images
文件夹中。
您将遇到的问题是,您的所有图像都将 "naked" 保留在您的 public 文件夹中,这将使它们处于热 linking 状态,而且阻止它们在资产管道中的正确使用。
如果您在 assets/images/....
中包含图像,您将在推送到生产环境时获得 precompile
个图像:
rake assets:precompile RAILS_ENV=production
无论如何,预编译都会将所有资产放入 /public
文件夹中...但更重要的是,fingerprints 它们:
public/assets/images/database/xotter-1-[[fingerprint]].jpg
如果您致电 image_tag databsae/xotter-1.jpg
,这些图片仍然可用,但这次它们会在正确的位置。
Rails 中的所有路径都取自 public
目录,因此您可以通过使用相对路径直接将 link 引用到 public
目录:
image_tag 'database/xotter-1.jpg
不同之处在于,如果您将图像放入 assets/images
,它们将包含在资产管道中,因此无论您 运行 您的应用所在的环境如何,它们都可以访问。
我的根 'root/tmp/database/*.JPG' 中有一个文件夹,我想在我的视图中显示 image_tag
。
我目前的代码是:
<% @images.each do |image| %>
<%= image_tag image.file, class: "img-responsive" %>
<% end %>
但是因为 image_tag
使用资产管道,它将图像渲染为:
'/images/tmp/database/xotter-1.jpg'
所以我的问题是,我是否可以使用 image_tag
并将图像呈现为:'/tmp/database/*.JPG'
您网站中提供的所有资源(图片、css、js 等)都需要来自 public 文件夹内的某个位置。但是,public 文件夹可以包含指向其他文件夹的 符号 links,即快捷方式。
因此,例如,如果您想提供来自 #{Rails.root}/tmp/database
的文件,您可以像这样创建一个符号 link:
#from your application folder
cd public
ln -s ../tmp/database database
您现在应该在 public 文件夹中看到 database
文件夹,并且可以 link 使用 url
"/database/xotter-1.jpg"
对应于
处的文件#{Rails.root}/public/database/xotter-1.jpg
这些说明假设您使用的是 bash 风格的命令行 shell,例如 linux 或 mac os。如果您在 windows 中,您可能需要以不同方式设置快捷方式。
编辑:关于显示文件夹中所有图像的后续问题的答案。
假设您有一个文件夹 #{Rails.root}/public/database
,并且您想要在其中找到所有 jpg 文件:您可以通过多种方式来实现。我喜欢 Dir[]
,与 File.join
一起使用(这是生成占 extra/missing 斜杠的文件路径的安全方法,否则很容易出错)例如
jpg_files = Dir[File.join("public/database", "*.jpg")]
=> ["public/database/foo.jpg", "public/database/bar.jpg"]
请注意,这些路径都是相对于命令的来源 运行 的,在 rails 服务器或控制台的情况下,是 rails 应用程序文件夹。
如果你想 link 这些,你需要相对于 public 文件夹的路径,你可以说
filename.gsub("public","")
=> "/database/foo.jpg"
所以,为了将它们结合在一起,在您的模板中:
<% Dir[File.join("public/database", "*.jpg")).each do |file| %>
<%= image_tag file.gsub("public",""), class: "img-responsive" %>
<% end %>
只是为了添加到 Max Williams
' 史诗般的答案,如果您用图像填充 public
文件夹(而不是 tmp
),您将能够使用 built-in asset_path
helpers:
Computes the path to asset in public directory
asset_path "database/xotter-1.jpg" #-> /public/assets/database/xotter-1.jpg"
我明白这意味着您必须使用 assets
子目录,但这是有充分理由的...
--
预编译
就个人而言,我会将图像放入您应用程序的 assets/images
文件夹中。
您将遇到的问题是,您的所有图像都将 "naked" 保留在您的 public 文件夹中,这将使它们处于热 linking 状态,而且阻止它们在资产管道中的正确使用。
如果您在 assets/images/....
中包含图像,您将在推送到生产环境时获得 precompile
个图像:
rake assets:precompile RAILS_ENV=production
无论如何,预编译都会将所有资产放入 /public
文件夹中...但更重要的是,fingerprints 它们:
public/assets/images/database/xotter-1-[[fingerprint]].jpg
如果您致电 image_tag databsae/xotter-1.jpg
,这些图片仍然可用,但这次它们会在正确的位置。
Rails 中的所有路径都取自 public
目录,因此您可以通过使用相对路径直接将 link 引用到 public
目录:
image_tag 'database/xotter-1.jpg
不同之处在于,如果您将图像放入 assets/images
,它们将包含在资产管道中,因此无论您 运行 您的应用所在的环境如何,它们都可以访问。