迁移 Discuz 站点时导入脚本错误


(freemangl) #21

能否分享下你的导入脚本?
我的总导入时间是Done (01h 32min 40sec)
这个应该是Post吧:succeeded: 84429
failed: 71


(神楽坂玲奈) #22

还没改完。。现在还半残的。。改完会发…不用急躁…

84429是你的站上的 posts 数量么?


(freemangl) #23

应该是的;这个是生产中的最后一个帖子:http://www.infinity-game.com/bbs/forum.php?mod=redirect&goto=findpost&ptid=6625&pid=85742&fromuid=346
可以看到pid=85742,排除一些删掉的帖子,应该差不多。
另外,你是直接在docker中运行的导入脚本吗?

我的帖子导入过程中也是各种警告和报错,似乎是gifsicle和svgo的版本不对;你在docker中导入有这些问题吗?
WARN: gifsicle 1.78 at /usr/bin/gifsicle (< 1.85) does not support removing exte nsion blocks svgo worker: didn't get version of svgo ? at /usr/local/bin/svgo; please provide proper binary or disable this worker (--no-svgo argument or `:svgo => false` th rough options) 83357 / 83687 ( 99.6%) Upload not valid :( #<ActiveModel::Errors:0x0055ed2f0269e0 @base=#<Upload id: nil, user_id: -1, orig inal_filename: "失è½çš„文明.doc", filesize: 39424, width: nil, height: nil, u rl: "", created_at: nil, updated_at: nil, sha1: "495fc6db0507a4f2ad485457143af3a 6f92a1cf2", origin: nil, retain_hours: nil>, @messages={:original_filename=>["So rry, the file you are trying to upload is not authorized (authorized extensions: jpg, jpeg, png, gif, zip, rar, pdf)."]}>


(神楽坂玲奈) #24

没有,只有一大堆脚本本身对 DZ 机制理解不正确或不完整的,附件那个是其中之一。

我是在 docker 中运行的。


(神楽坂玲奈) #25

…我怎么觉得这是字符编码问题呢,看那个乱码的 filename


(神楽坂玲奈) #26

我先贴一版上来,这是正在调试的,不是发布。只看看就好,别真拿来用,也别基于这版改 (因为我还在继续改着)

里面夹杂着一大堆调试用的限定,例如注释掉了几个步骤,导入数据只取 id 前多少,奇怪的调试输出之类

大致上加了这么些东西:

用户

昵称:真实姓名 > 自定义头衔
地址:邮寄地址 > 居住地址 > 出生地址
网址:个人主页 > QQ (空间)
个人资料背景:头部 > 背景 > 内容区 > 标题栏
用户资料背景:内容区 > 标题 > 头部 > 标题栏
关于我:个人介绍 > 个人签名 > 最新动态

分类

分类标志图片:版块图标
slug:能取到,但是没做
不在首页显示:能取到,但是没做

帖子

正文加了大量标签
回复和引用关系维护存在 bug,不懂 discourse 的机制。这个我弄好之后希望别人来改一下。

书签

brand new

私信

似乎存在 bug,还没研究透,也还没修

附件

修正帖子内没引用的附件不导入的 bug
如果用户直接以 URL 方式引用了附件,也导入。


(freemangl) #27

加油,期待你的发布;另外用户密码的问题你有什么好想法吗?
我觉得修改discourse的加密方式和dz一样估计是最好的办法了吧?
dz转phpwind,也不需要重置密码啥的。

乱码的文件名应该是没有允许doc的附件吧。那个就不用管了。
最多的警告还是这2条:
WARN: gifsicle 1.78 at /usr/bin/gifsicle (< 1.85) does not support removing exte nsion blocks svgo worker: didn't get version of svgo ? at /usr/local/bin/svgo; please provide proper binary or disable this worker (--no-svgo argument or `:svgo => false` th rough options)


(神楽坂玲奈) #28

直接改 discourse 的算法侵入性太高了,总觉得不科学。插件在验证之前加一个 hook 感觉更好。


(神楽坂玲奈) #29

调教的差不多了…
短消息 bug 和帖子回复引用关系不知道怎么搞需要帮助
然后需要Unicode 用户名的支持。。。。你能简单改一份全 Unicode的么,字符伪造那问题不用在意我能导入就好。。
做中文用户名支持做成中文 only 也是 QAQ。。


(freemangl) #30

可以直接使用了么?把最细版放一个到discourse的分之吧,等@fantasticfears 来再帮忙看看。

如果要重新允许转换脚本,直接运行即可?还是得清空数据库?


(神楽坂玲奈) #31

还在加进去中文测,似乎用户名还有 bug


(freemangl) #32

如果要重新允许转换脚本,直接运行即可?还是得清空数据库?

discourse限制了用户名字符数量,好像如果了2个中文字的用户名就会随机分配一个数字替代。
中文username现在我发现的唯一bug就是无法点击中文用户名的头像,这个需要改js。但制作者不熟悉…得现学。


(神楽坂玲奈) #33

更新了下,可以试试看。


(freemangl) #34

看了下dz的用户密码加密模式,如果要在dis中添加相关的认证则需要把pre_ucenter_member表中的salt字段也导入进来进行2次md5加密。目前貌似导入脚本并没有导入salt字段。

关于dz的加密资料:
http://blog.csdn.net/yanhui_wei/article/details/17958013
http://www.php2.cc/article-966-1.html

slug是什么?

brand new是啥意思?


(神楽坂玲奈) #35

slug 那东西就叫 slug,在分类设置里面。会影响分类的 url

brand new…就是说整个功能是新加的
重新转换应该要清,脚本会跳过已有的。
以及还发现了一些问题,今天又改了。。还没测好。。

freemangl info@discoursecn.org于2016年1月11日周一 下午2:52写道:


(神楽坂玲奈) #36

discourse 的password_hash是个 string(64)
而 discuz 的 password 和 salt 分别是char(32)和 char(6)
这样导入的时候简单把这两个字段合到一起填进 password_hash 那个字段就好了,读的时候取前32位为密码,后6位为 salt。这样最简单。

如果按我说的那个挂个插件脚本,在验证的时候判一下是否是新导入的用户blablabla 的,也正好可以拿这个密码长度来判断,如果password_hash 是38位那就先走一遍 UC 判断更新了密码再走普通的验证,如果不是就直接走普通验证。


(神楽坂玲奈) #37

密码那个我搞定了,比想象中的简单。

导入脚本又更了一下,还是在

里面还是带着一堆 uid < xxx、tid < xxx 之类的debug限定用的时候自己去除

与导入密码相关的在导入 user 那里,salt 和 password_hash 那两个字段,以及下面的 activate。

以及再加载这个插件

就可以了。


更新:顺便做上了对老php 链接格式的支持。


(freemangl) #38

哇哇哇,你好屌啊!!!真是激动死了。


(freemangl) #39

这个是干嘛用的?
我刚刚在docker中转换刚执行转换脚本bundle exec ruby script/import_scripts/discuz_x.rb bbcode-to-md
就报错了:
/usr/local/lib/ruby/gems/2.0.0/gems/activerecord-4.2.5/lib/active_record/connection_adapters/postgresql_adapter.rb:661:in `rescue in connect': FATAL: database "discourse_development" does not exist (ActiveRecord::NoDatabaseError)
是不是需要编辑config/database.yml ?


下面这个问题搞定了,是需要su - discourse用户下

好像是postgresql的discourse用户权限问题?还是脚本中需要改什么特别的地方?

root@VM-138-242-ubuntu-app:/var/www/discourse# bundle exec ruby script/import_scripts/discuz_x.rb bbcode-to-md URGENT: FATAL: Peer authentication failed for user "discourse" Failed to initialize site default /usr/local/lib/ruby/gems/2.0.0/gems/activerecord-4.2.5/lib/active_record/connection_adapters/postgresql_adapter.rb:651:in `initialize': FATAL: Peer authentication failed for user "discourse" (PG::ConnectionBad) from /usr/local/lib/ruby/gems/2.0.0/gems/activerecord-4.2.5/lib/active_record/connection_adapters/postgresql_adapter.rb:651:in `new' from /usr/local/lib/ruby/gems/2.0.0/gems/activerecord-4.2.5/lib/active_record/connection_adapters/postgresql_adapter.rb:651:in `connect' from /usr/local/lib/ruby/gems/2.0.0/gems/activerecord-4.2.5/lib/active_record/connection_adapters/postgresql_adapter.rb:242:in `initialize' from /usr/local/lib/ruby/gems/2.0.0/gems/activerecord-4.2.5/lib/active_record/connection_adapters/postgresql_adapter.rb:44:in `new' from /usr/local/lib/ruby/gems/2.0.0/gems/activerecord-4.2.5/lib/active_record/connection_adapters/postgresql_adapter.rb:44:in `postgresql_connection' from /usr/local/lib/ruby/gems/2.0.0/gems/activerecord-4.2.5/lib/active_record/connection_adapters/abstract/connection_pool.rb:438:in `new_connection' from /usr/local/lib/ruby/gems/2.0.0/gems/activerecord-4.2.5/lib/active_record/connection_adapters/abstract/connection_pool.rb:448:in `checkout_new_connection' from /usr/local/lib/ruby/gems/2.0.0/gems/activerecord-4.2.5/lib/active_record/connection_adapters/abstract/connection_pool.rb:422:in `acquire_connection' from /usr/local/lib/ruby/gems/2.0.0/gems/activerecord-4.2.5/lib/active_record/connection_adapters/abstract/connection_pool.rb:349:in `block in checkout' from /usr/local/lib/ruby/2.0.0/monitor.rb:211:in `mon_synchronize' from /usr/local/lib/ruby/gems/2.0.0/gems/activerecord-4.2.5/lib/active_record/connection_adapters/abstract/connection_pool.rb:348:in `checkout' from /usr/local/lib/ruby/gems/2.0.0/gems/activerecord-4.2.5/lib/active_record/connection_adapters/abstract/connection_pool.rb:263:in `block in connection' from /usr/local/lib/ruby/2.0.0/monitor.rb:211:in `mon_synchronize' from /usr/local/lib/ruby/gems/2.0.0/gems/activerecord-4.2.5/lib/active_record/connection_adapters/abstract/connection_pool.rb:262:in `connection' from /usr/local/lib/ruby/gems/2.0.0/gems/activerecord-4.2.5/lib/active_record/connection_adapters/abstract/connection_pool.rb:571:in `retrieve_connection' from /usr/local/lib/ruby/gems/2.0.0/gems/activerecord-4.2.5/lib/active_record/connection_handling.rb:113:in `retrieve_connection' from /usr/local/lib/ruby/gems/2.0.0/gems/activerecord-4.2.5/lib/active_record/connection_handling.rb:87:in `connection' from /usr/local/lib/ruby/gems/2.0.0/gems/activerecord-4.2.5/lib/active_record/model_schema.rb:230:in `table_exists?' from /usr/local/lib/ruby/gems/2.0.0/gems/activerecord-4.2.5/lib/active_record/attribute_methods/primary_key.rb:97:in `get_primary_key' from /usr/local/lib/ruby/gems/2.0.0/gems/activerecord-4.2.5/lib/active_record/attribute_methods/primary_key.rb:85:in `reset_primary_key' from /usr/local/lib/ruby/gems/2.0.0/gems/activerecord-4.2.5/lib/active_record/attribute_methods/primary_key.rb:73:in `primary_key' from /usr/local/lib/ruby/gems/2.0.0/gems/activerecord-4.2.5/lib/active_record/core.rb:132:in `find' from /var/www/discourse/script/import_scripts/base.rb:464:in `<class:Base>' from /var/www/discourse/script/import_scripts/base.rb:20:in `<top (required)>' from script/import_scripts/discuz_x.rb:12:in `require' from script/import_scripts/discuz_x.rb:12:in `<main>'


(神楽坂玲奈) #40

更新了一下,地址不变,cgi 的引用去掉了,不过多了这俩 gem
php_serialize
miro

跟 mysql2 用同样的方式安装。

peer auth failed 那个我是这么处理的

echo 'local all all trust' > /etc/postgresql/9.3/main/pg_hba.conf
service postgresql reload

development 找不到那个我是这么处理的

RAILS_ENV=production bundle exec ruby script/import_scripts/discuz_x.rb bbcode-to-md