Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用image_标记从根目录渲染图像_Ruby On Rails_Asset Pipeline - Fatal编程技术网

Ruby on rails 使用image_标记从根目录渲染图像

Ruby on rails 使用image_标记从根目录渲染图像,ruby-on-rails,asset-pipeline,Ruby On Rails,Asset Pipeline,我的根目录“root/tmp/database/*.JPG”中有一个文件夹,我想用image\u标签在视图中显示该文件夹 我目前的代码是: <% @images.each do |image| %> <%= image_tag image.file, class: "img-responsive" %> <% end %> 因此,我的问题是,我是否可能使用图像标记并将图像呈现为:'/tmp/database/*.JPG'您网站中提供的所有资产(图像、c

我的根目录“root/tmp/database/*.JPG”中有一个文件夹,我想用
image\u标签
在视图中显示该文件夹

我目前的代码是:

<% @images.each do |image| %>
  <%= image_tag image.file, class: "img-responsive"  %>
<% end %>
因此,我的问题是,我是否可能使用
图像标记
并将图像呈现为:
'/tmp/database/*.JPG'

您网站中提供的所有资产(图像、css、js等)都需要来自公共文件夹中的某个位置。但是,公用文件夹可以包含指向其他文件夹的符号链接(又称快捷方式)

因此,例如,如果您想提供来自
{Rails.root}/tmp/database
的文件,您可以创建如下符号链接:

#from your application folder
cd public
ln -s ../tmp/database database
现在,您的公共文件夹中应该有
数据库
文件夹的外观,并且可以使用url链接到其中的文件

"/database/xotter-1.jpg"
对应于以下位置的文件:

#{Rails.root}/public/database/xotter-1.jpg
这些说明假设您在bash风格的命令行shell中,例如在linux或macos中。如果您在windows中,可能需要以不同的方式设置快捷方式

编辑:关于在文件夹中显示所有图像的后续问题的答案

假设您有一个文件夹
#{Rails.root}/public/database
,并且您希望在其中查找所有jpg文件:您可以通过多种方式进行查找。我喜欢与
File.join一起使用的
Dir[]
(这是一种生成文件路径的安全方法,该路径可以解释额外/缺少的斜杠,否则很容易出错)例如

请注意,这些路径都与命令的运行位置有关,在rails服务器或控制台的情况下,这些路径是rails应用程序文件夹

如果要链接到这些文件夹,则需要相对于公用文件夹的路径,您可以通过以下方式获得该路径:

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
”epic answer中,如果您用图像填充
public
文件夹(而不是
tmp
),您将能够使用内置的:

计算公共目录中资产的路径

我理解这意味着您必须使用
assets
子目录,但这有一个很好的理由

--

预编译

就我个人而言,我会将这些图像放入你应用程序的
资产/图像
文件夹中

您将遇到的问题是,您的所有图像将在公用文件夹中保持“裸体”,这将使它们打开以进行热链接,但也会阻止它们在资产管道中的正确使用

如果将图像包括在
资产/images/…
中,则在投入生产时可以看到图像:

rake assets:precompile RAILS_ENV=production
预编译将所有资产放入
/public
文件夹中。。。但更重要的是,他们:

如果调用
image\u-tag-databasea/xotter-1.jpg
,这些图像仍然可用,但这次它们将位于正确的位置


Rails中的所有路径都取自
public
dir,因此您可以使用相对路径直接引用指向
public
dir的链接:

image_tag 'database/xotter-1.jpg

区别在于,如果您将图像放入
资产/图像
,它们将包含在资产管道中,因此无论您运行应用程序的环境如何,都可以访问它们。

这里的“根”是什么?它是您的rails应用程序文件夹吗?您站点中使用的所有资产都需要来自应用程序的
public
文件夹。我的根目录实际上是我的应用程序文件夹(我不知道应用程序的plubic文件夹)
asset_path "database/xotter-1.jpg" #-> /public/assets/database/xotter-1.jpg"
rake assets:precompile RAILS_ENV=production
public/assets/images/database/xotter-1-[[fingerprint]].jpg
image_tag 'database/xotter-1.jpg