【问题标题】:Rails 5 unable to write to NFS mount on RHEL7 Operation not supported copy_file_rangeRails 5 无法写入 RHEL7 上的 NFS 挂载操作不支持 copy_file_range
【发布时间】:2020-11-23 16:45:08
【问题描述】:

我正在编写一个 Rails 5 应用程序,该应用程序将部署到使用 NFS 挂载进行存储的 RHEL7 主机。

应用程序使用 CarrierWave 插件将上传的文件写入 RHEL7 主机上的 NFS 挂载。

class ExampleUploader < CarrierWave::Uploader::Base

  # Choose what kind of storage to use for this uploader:
  storage :file

  def store_dir
    "#{Rails.root.to_s}/#{model.class.to_s.underscore}/#{model.id}"
  end

end

代码在本地开发环境(笔记本电脑上)中工作,但是,相同的代码在部署到 RHEL7 服务器时停止工作。

Puma caught this error: Operation not supported - copy_file_range (Errno::EOPNOTSUPP)
/usr/local/lib/ruby/2.5.0/fileutils.rb:1293:in `copy_stream'
/usr/local/lib/ruby/2.5.0/fileutils.rb:1293:in `block (2 levels) in copy_file'
/usr/local/lib/ruby/2.5.0/fileutils.rb:1292:in `open'
/usr/local/lib/ruby/2.5.0/fileutils.rb:1292:in `block in copy_file'
/usr/local/lib/ruby/2.5.0/fileutils.rb:1291:in `open'
/usr/local/lib/ruby/2.5.0/fileutils.rb:1291:in `copy_file'
/usr/local/lib/ruby/2.5.0/fileutils.rb:432:in `copy_file'
/usr/local/lib/ruby/2.5.0/fileutils.rb:359:in `block in cp'
/usr/local/lib/ruby/2.5.0/fileutils.rb:1463:in `block in fu_each_src_dest'
/usr/local/lib/ruby/2.5.0/fileutils.rb:1479:in `fu_each_src_dest0'
/usr/local/lib/ruby/2.5.0/fileutils.rb:1461:in `fu_each_src_dest'
/usr/local/lib/ruby/2.5.0/fileutils.rb:358:in `cp'
/usr/local/bundle/gems/carrierwave-0.11.2/lib/carrierwave/sanitized_file.rb:213:in `copy_to'

根据我的研究,在 RHEL7 中禁用了 copy_file_range 函数,这是 Ruby 应该用来写入文件的低级函数。这意味着 Ruby 无法写入 RHEL7 主机上的 NFS 挂载。

看起来最近进行了更新,但只是更改了错误消息的类型,实际上并没有解决问题。

问题:我们有哪些选择可以让它发挥作用?是否有适用于 Ruby 的补丁程序?或者我们是否需要将它部署在 RHEL7 之外的另一个操作系统上?如果是这样,什么操作系统实际上支持 Ruby 写入 NFS 挂载?

【问题讨论】:

    标签: ruby ruby-on-rails-5 rhel7


    【解决方案1】:

    在将主机操作系统更新到最新版本的 RHEL7 后,此问题已得到修复。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-20
      • 1970-01-01
      • 2017-03-25
      • 2020-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-28
      相关资源
      最近更新 更多