【问题标题】:Rails Paperclip Error after upgrading ruby from 2.3.1 to 3.0.1将 ruby​​ 从 2.3.1 升级到 3.0.1 后出现 Rails Paperclip 错误
【发布时间】:2026-01-24 19:40:01
【问题描述】:

现有项目在 ruby​​ 2.3.1 中,并将版本升级到 3.0.1 (rails 6.1.4) 以及相关的 gem。

将 gem 更新为 "paperclip" 到 "kt-paperclip"。

上传文档时出现以下错误。 错误:
[回形针] 试图将 /tmp/RackMultipart20210809-20058-nn1h6f.jpeg 链接到 /tmp/a87ff679a2f3e71d9181a67b7542122c20210809-20058-f12xva.jpeg [回形针] 试图将 /tmp/a87ff679a2f3e71d9181a67b7542122c20210809-20058-f12xva.jpeg 链接到 /tmp/a87ff679a2f3e71d9181a67b7542122c20210809-20058-tr9ezt.jpe [回形针] 试图将 /tmp/a87ff679a2f3e71d9181a67b7542122c20210809-20058-f12xva.jpeg 链接到 /tmp/a87ff679a2f3e71d9181a67b7542122c20210809-20058-ddtnlx.jpe [回形针] 试图将 /tmp/a87ff679a2f3e71d9181a67b7542122c20210809-20058-f12xva.jpeg 链接到 /tmp/a87ff679a2f3e71d9181a67b7542122c20210809-20058-ux65dm.jpe

以下是我现有的设置:

has_attached_file :file_local,
                path: ":rails_root/public/system/:attachment/:id/:style/:basename.:extension",
                url:  "/system/:attachment/:id/:style/:basename.:extension" 

has_attached_file :file,
            processors: [:format_delegator],
            path: ":configured_path",
            whiny: false,
            styles: {rectangle: ["1280x640#", :jpg],
                     narrow: ["640x", :jpg],
                     large: ["1980x", :jpg],
                     square: ["480x480#", :jpg],
                     thumbnail: ["1920x1080#", :jpg],
                     encoded: {output: "html5",
                               processors: [:transcoder]}},             
            default_url: :set_default_url,
            storage: :s3,
            url: SETTINGS[:amazon][:s3_alias_url], 
            s3_host_name: SETTINGS[:amazon][:host_name],
            s3_host_alias: SETTINGS[:amazon][:cloudfront_host],
            s3_permissions: :private,
            s3_protocol: :https,
            s3_region: SETTINGS[:amazon][:region],
            s3_credentials: {
                bucket: SETTINGS[:amazon][:bucket]
            }

有谁知道,如何解决上述问题? 我需要检查哪个配置来跟踪问题?

【问题讨论】:

  • 哇——有很多个 Rails 版本可以跳过!您是直接从 Rails 2 到 Rails 6,还是浏览了各个版本并检查了所有更改? FWIW,您也许可以删除 Paperclip 并使用 Rails 中的 ActiveStorage 工具。
  • 我已经一一更新了所需的gem,还更新了相关的代码更改。除了文件上传外,一切都按预期工作。现在,回形针代码被更多地使用,所以如果有任何方法可以用回形针解决,我想用它。注意:我已将 ruby​​ 版本从 2.3.1 更新到 3.0.1
  • 只是您已经跳过了 很多 的 Rails 版本以及随之而来的更改和弃用,而且这些年来,我在 Rails 中看到了很多关于 Paperclip 的帖子已经改变。查看哪个 Rails 版本破坏了您的 Paperclip 代码可能会很有用。不过,恐怕我无法专门为 Paperclip 提供帮助。祈祷有人能来!

标签: ruby-on-rails paperclip


【解决方案1】:

我不认为这是一个错误。 回形针 io_adapters/abstract_adapter.rb 文件,其中一个日志中有函数 link_or_copy_file。

 def link_or_copy_file(src, dest)
  begin
    Paperclip.log("Trying to link #{src} to #{dest}")
    FileUtils.ln(src, dest, force: true) # overwrite existing
  rescue Errno::EXDEV, Errno::EPERM, Errno::ENOENT, Errno::EEXIST => e
    Paperclip.log(
      "Link failed with #{e.message}; copying link #{src} to #{dest}"
    )
    FileUtils.cp(src, dest)
  end

  @destination.close
  @destination.open.binmode
end

这只是日志,文件正在上传到本地文件夹中。

【讨论】:

    最近更新 更多