Paperclip中`:path`和`:url`之间的区别

时间:2015-12-08 23:14:17

标签: ruby-on-rails paperclip

默认情况下,我只在 test 环境中配置了以下内容。 (其他层使用Amazon S3作为存储)

Paperclip::Attachment.default_options[:path] =
  ":rails_root/public/system/:rails_env/:class/:attachment/:id_partition/:filename"
Paperclip::Attachment.default_options[:url] =
  "/system/:rails_env/:class/:attachment/:id_partition/:filename"

我在理解:path:url选项之间的区别以及何时使用哪个选项时遇到了一些麻烦。一些基本的谷歌搜索告诉我url是普遍可访问的路径,而path是本地存储路径。

是否有任何理由真的与之不同,我是否应该在测试环境中保持不同?我的问题是我在规范测试中调用<my_attachment>.url,但由于它实际存储在path定义的位置

,因此无法找到它

谢谢!

2 个答案:

答案 0 :(得分:1)

path返回相对位置。例如:

  

/images/example.jpg

另一方面,

url返回绝对位置,就像在Rails路由助手中一样。

  

http://www.example.com/images/example.jpg

因此,如果您在网站上显示图像。请使用path引用它,因为它与您当前的网址和域名相关。

如果您想通过api将其发送到第三方应用程序,将其添加到您的应用程序或其他类似场景的出站电子邮件中,则应使用url方法。我想你的测试和测试环境会是一样的。我希望这可以解决你的困惑。

答案 1 :(得分:0)

path定义了文件存储的位置。 url定义了可以公开访问文件的位置。默认情况下,路径将使用您为URL定义的内容组成:

Paperclip::Attachment.default_options
=> {:url=>"/system/:class/:attachment/:id_partition/:style/:filename",
    :path=>":rails_root/public:url", ...}

通常只需定义url

来自paperclip文档:

  

本地文件系统上(以及Rails应用程序的公共目录中)的文件将可以通过Internet进行访问。如果您需要访问控制,则可以将文件放置在其他位置。您将需要同时更改:path和:url选项,以确保文件对公众不可用。 :path和:url都允许使用同一组插值变量。

https://github.com/thoughtbot/paperclip#understanding-storage