Input/output 使用 Vagrant 和 winnfsd 时出错

Input/output error using Vagrant & winnfsd

我正在使用 vagrant-winnfsd 插件在 Windows 8.1 主机上通过 Vagrant 添加 NFS 支持。我是 运行宁 Ubuntu 14.04 的客人。

我正在使用此设置来 运行 一个 Rails 应用程序。一切 运行 都很好,除了当 Rails/Carrierwave 试图从生成此错误的 tmp 目录中删除文件时:

Errno::EIO (Input/output error @ dir_s_rmdir - /vagrant/myproject/public/uploads/tmp/1421108602-18479-5242):

这是我的 Vagrant 文件的相关部分:

config.vm.network "private_network", type: "dhcp"
config.vm.synced_folder ".", "/vagrant", type: "nfs"

有什么解决办法吗?

我终于能够使用 GitHub 一张票中建议的 this approach 解决这个问题。

基本上它涉及将 Rails 和 Carrierwave 指向 /vagrant 文件夹之外的目录以将 tmp 文件转储到其中以避免 运行 进入任何 lock/permission 问题:

# config/initializers/01_patch_tmpdir.rb

class Dir
  def self.tmpdir
    '/home/vagrant/rails_tmp/'
  end
end

CarrierWave.configure do |config|
  config.cache_dir = '/home/vagrant/uploads_tmp/tmp/uploads'
  config.root = '/home/vagrant/uploads_tmp/tmp'
end

ENV['TMPDIR'] = Dir.tmpdir

您现在可以继续将该文件添加到您的 .gitignore,这样它就不会妨碍其他人处理您的项目。