windows server上 gorm 连接DB提示 the system cannot find the path specified

HollowKnight · · 3150 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

友情提示:window server上很容易就踩坑

1. 背景

  • 语言:golang
  • ORM: gorm
  • 运行环境: Windows server

1. 起因

因为外在因素,不得不在Windows server上跑程序,然后就直接在在初始化DB连接时失败了,返回的error是the system cannot find the path specified。这里其实是有点奇怪的,这提示似乎指的是本地文件路径问题,但DB配置是已经读取成功的,连接也是连接远端DB,并没有读取本地文件操作?

2. 查

  1. 顺着链路往下查,在gorm.open报错,查到是parseDsn失败,但同样的程序和dsn在本地电脑运行并没有问题。
  2. 继续往下,看到parseDsn里的parseDSNParams里其中有个地方调用time.LoadLocation函数。
  3. 知道了。LoadLocation 有个问题,它依赖于 IANA Time Zone Database 这个数据库,一般linux系统都带了,但是windows系统就没带。没有 tzdata 就会从$GOROOT/中找。但很明显,Windows server并没有装golang,所以肯定会找不到指定路径,因此会提示这个看似搭不上边的错误。(Linux就不用管)

3.解决

把tzdata文件放到程序目录,我直接指定ZONEINFO环境变量就行了,os.Setenv("ZONEINFO", '.\zoneinfo.zip')。 另外Windows我一般都用filepath.Join去处理一遍路径,免得斜杠反斜杠烦恼。


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:HollowKnight

查看原文:windows server上 gorm 连接DB提示 the system cannot find the path specified

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3150 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传