You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails向SFTP上传文件时报Errno::ENOTTY设备ioctl错误如何解决

问题修复方案

错误根因

Errno::ENOTTY (Inappropriate ioctl for device) 由Net::SSH默认尝试分配伪终端(PTY)导致:Rails Web请求、后台任务这类非交互式运行环境无可用TTY设备,终端控制相关系统调用无法执行。
此外现有代码存在拼写错误:case even 需改为 case event,否则会触发未定义变量报错。

修复步骤

  • 显式在Net::SSH.start配置中添加use_pty: false,关闭伪终端分配
  • 修正拼写错误,建议显式指定SFTP服务器端的上传目标路径,避免默认路径逻辑不符合预期

修复后完整代码

Net::SSH.start(SFTP_HOST, sftp_user, {
  :port => SFTP_PORT, 
  :password => sftp_password,
  :use_pty => false # 新增配置关闭伪终端分配
}) do |ssh|
  ssh.sftp.connect do |sftp|
    # 第二个参数为SFTP服务器端的目标存储路径,可按需修改
    remote_file_path = "./#{File.basename(measurements_xml_file_path(meas))}"
    sftp.upload!(measurements_xml_file_path(meas).to_s, remote_file_path) do |event, uploader, *args|
      case event # 修正此处拼写错误
      when :open
        puts "Starting upload"
      when :finish
        puts "Finished upload"
        return true
      end
    end
  end
end

可选排查项

如果调整后仍存在异常,可依次检查:

  • SFTP连接配置(地址、端口、账号密码)正确,服务器侧允许密码认证
  • 本地XML文件路径存在且程序有可读权限
  • SFTP服务器侧目标目录对当前账号开放写入权限

内容的提问来源于stack exchange,提问作者moh19814

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 03:36:03