【问题标题】:Difference between `:path` and `:url` in PaperclipPaperclip中`:path`和`:url`之间的区别
【发布时间】:2015-12-08 23:14:17
【问题描述】:

默认情况下,我仅在我的 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 定义的位置

谢谢!

【问题讨论】:

    标签: ruby-on-rails paperclip


    【解决方案1】:

    path 返回相对位置。例如:

    /images/example.jpg

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

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

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

    如果您想通过 api 将其发送到 3rd 方应用程序,请将其添加到您的应用程序或其他类似场景的出站电子邮件中,您应该使用 url 方法。我想这与您的测试和测试环境相同。我希望这能消除您的困惑。

    【讨论】:

      【解决方案2】:

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

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

      通常定义url 就足够了。

      来自paperclip 文档:

      本地文件系统(以及 Rails 应用程序的公共目录中)上的文件将在整个互联网上可用。如果您需要访问控制,可以将文件放在不同的位置。您需要同时更改 :path 和 :url 选项,以确保文件对公众不可用。 :path 和 :url 都允许使用相同的插值变量。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-11-19
        • 1970-01-01
        • 1970-01-01
        • 2014-10-26
        • 2012-08-21
        • 2014-01-31
        • 2012-11-06
        相关资源
        最近更新 更多