Rails carrierwave 在备份的数据库上,无法获得 url

lukefan · 2020年02月18日 · 最后由 lukefan 回复于 2020年02月18日 · 2447 次阅读

carrierwave 用了一段时间 通过 mount_uploader :picture, PictureUploader 工作。 信息是存在数据了中 picture_filename 字段里面,然后再配合着相关的云端配置来获取正确的 url 我现在出现了一个奇怪的问题,我把一个数据库迁移到了一个新的应用中,并还原的代码,picture_filename 字段里面的内容也是正确的。 但是不知道为什么,在取 picture.url 的时候,返回的永远是 nil。 检查了各处代码,都是照着原来可以工作的代码复制的,包括 config/initializers/carrierwave.rb /app/uploaders/picture_uploader.rb 但是原来的数据就是读不出来。 数据在数据库里面的 picture_filename 里面,可以看到。就是在命令行就读不出来。 在原来的应用中没有问题,可以使用。

不知道影响 carrierwave 还有哪些因素。

感觉是版本的问题,原来的版本 carrierwave 将信息存在 picture_filename 里面,现在好像默认是存在 picture 字段里面。 我做了复制,但是好像还是不对,依然读不出 url 来,是不是存进去的格式也发生了变化? 感觉原来存储的仅仅是一个文件名,而现在好像存储的是一个非常复杂的 json,直接吧原来的字符串赋值过去,搞不定啊。

先指定原来版本试试。

Rei 回复

版本差异太大了,4 年了,ruby 和 rails 的版本都升级了,原来的版本不一定能跑了。

看了下 changelog,没看到那么大的 break change 啊,json 是用 Multiple file uploads 的时候才用到的。

是不是 mount_uploader mount_uploaders 区别。

Rei 回复

两边都是 mount_uploader,我查了一下,里面存的也是一个文件名,没有任何变化。 但是,我重新存进去的可以用,原来数据导过来的就不工作,不知道还有些什么奇怪的信息,放在外面。

Rei 回复

试验了几次,感觉还是字段的问题,重新赋值了字段,将原来 picture_filename 里面的信息,复制到 picture 里面,但是需要重启之后,才能够 run。估计是内存里面还有一些残留。 诡异。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号