默认情况下,我只在 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
定义的位置
谢谢!
答案 0 :(得分:1)
path
返回相对位置。例如:
另一方面,/images/example.jpg
url
返回绝对位置,就像在Rails路由助手中一样。
因此,如果您在网站上显示图像。请使用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