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


(freemangl) #41

我看新修改的地方用了相对路径,但貌似我用原来的绝对路径也能导入成功。需要改为相对路径吗?

我看你有引入了2个新东西,这2个作用是啥?
require 'php_serialize' require 'miro'
结果又出错了:
script/import_scripts/discuz_x.rb:10:in require': cannot load such file -- php_serialize (LoadError) from script/import_scripts/discuz_x.rb:10:in

是不是需要在Gemfile中加上这2个东西:
gem 'php_serialize’
gem 'miro’
然后在bundle install --no-deployment ?

刚才试了下确实是。


如果要重新执行转换脚本,需要清空原来的数据库吗?还是直接重新执行就可以了?[quote=“zh99998, post:51, topic:260”]
development 找不到那个我是这么处理的
[/quote]

我的处理方式是编辑config/database.yml中的discourse_development数据库改为discourse。

这个是要su - discourse下,因为discourse的postgresql数据库用户权限在discourse用户下。

题外话,discourse的各种编辑,讨论,引用,这种感觉太好了,其他论坛程序完全体验不到。


(神楽坂玲奈) #42
  1. 路径定义跟原来相同,原来也是相对路径的,我没改。

freemangl info@discoursecn.org于2016年1月15日周五 23:23写道:


(freemangl) #43

在你修改之前的是这样的绝对路径啊:
DISCUZX_BASE_DIR = '/webdata/project/bbs' AVATAR_DIR = '/uc_server/data/avatar' ATTACHMENT_DIR = '/data/attachment/forum'


(神楽坂玲奈) #44

在我修改之前不是绝对路径, /uc_server/data/avatar 是指 /webdata/project/bbs
/uc_server/data/avatar

而我的 uc 恰好不在论坛目录里,于是就变成了 …/ 开头。

freemangl info@discoursecn.org于2016年1月16日周六 上午10:55写道:


(freemangl) #45

我重新运行了转换脚本,貌似新的数据并没有写入数据库。
之前有很多用户没有导入,虽然转换脚本这次似乎是导入了新用户,但在前台并没有看到。

另外,貌似最新版的1.5 beta8在修改了env:
LANG: zh_CN.UTF-8
之后默认站点并不是中文。


(神楽坂玲奈) #46

中文是有个专门的 ENV,DISCOURSE 开头的,配置文件里有,默认注释掉的。LANG 不用改。
需要清数据。

freemangl info@discoursecn.org于2016年1月16日周六 上午11:22写道:


(freemangl) #47

你是ssh登录docker后再进入pgsql清的数据还是直接删除shared中的postgres_data目录?再rebuild app?


(神楽坂玲奈) #48

删除shared下的一切。然后 rebuild


(freemangl) #49

你是把主机目录挂载到docker中吗,还是把dz的文件拷贝到docker中?我找了好多命令都有各种问题,无法成功挂载。


(神楽坂玲奈) #50

嗷,我是把论坛目录弄到 /var/discourse/shared/standalone 下的这样 docker 内就自然有了。。
不过这么弄了的话删 /shared 的时候悠着点儿别把自己论坛删了…


(freemangl) #51

这个方法好赞啊!!!


(freemangl) #52

转换成功,测试站上线了:http://bbs.infinity-game.com/
原生产站:http://www.infinity-game.com/bbs

目前发现几个疑点:
1.投票导入貌似有点问题:(同一个帖子,没有记录到以前的投票数和人数,不过这个是小问题)
http://bbs.infinity-game.com/t/kickstarter/6045
http://www.infinity-game.com/bbs/forum.php?mod=viewthread&tid=6619

2.推荐主题的算法好奇怪,基本都会推荐到自己的帖子。


(神楽坂玲奈) #53

投票人数那个我是没有导入。。那个不打算折腾了。。。谁有精力继续去完善吧


(freemangl) #54

发现个新
问题1,好像这样帖子中有纯引用的部分没有被导入;目前发现只是主题帖子的引用没有被导入,回复中的纯引用是OK的。怀疑是不是主题帖和回复中对引用的处理方式不同?
原帖1:http://www.infinity-game.com/bbs/forum.php?mod=viewthread&tid=6587
测试1:http://bbs.infinity-game.com/t/30w/6019

原帖2:http://www.infinity-game.com/bbs/forum.php?mod=viewthread&tid=491
测试2:http://bbs.infinity-game.com/t/infinity-2/459

问题2:“浏览数”(discuz中叫“查看数”)也没有导入进去;目前都是0。

另外你有没有遇到过注册邮件提示已经发送,但后台没有发送记录,也收不到的情况?
你在测试站点测试下用户注册或登录后在个人设置中发送重置密码的邮件看看,貌似都没有发送出去。是不是某个插件导致的bug了。

这个问题解决了,rebuild app了一下,不知道是哪里卡住了。


(Erick Guan) #55

这是不可能的。只能用很 Hack 的方法。

导入脚本的修改是工程量巨大而且很无聊的工作,到市集里发一帖找一个熟悉 Ruby 的工程师吧。

导入脚本:我会和 @zh99998 约个时间把能提交的部分提交了。

这些问题还请待我把修改合并到官方了,再试着跑一次。

PS:原来你是无限星辰的管理员,我记得我从初中就开始期待这游戏了,到现在都没玩上过…

PS2:导入脚本的规模已经过大需要重构了。


(神楽坂玲奈) #56

引用部分应该是个 bug,我觉得跟进对 raw 的首次读取以及每次更改就能找出来是哪里的问题

浏览数的话,DZ 里就是一个 viewnum 的字段,没有详细记录。如果 discourse 也是这样的话,那加起来就非常简单,只需要 select 那里多个字段,然后下面创建的时候多个字段就可以。


(freemangl) #57

现在刚刚众筹成功,下月初就开始第一轮测试了。

@zh99998 修改的版本目前也只发现这2个问题了,如果改好就可以直接用了吧。


(freemangl) #58

这里留个备忘,还需要解决的小问题:@zh99998 @fantasticfears

  • 表格
  • 浏览数
  • 投票记录
  • 列表排版
  • dz的自定义表情
  • 中文用户名添加特殊字符(五角星)

discuz中表格是这样的:
[table=50%] [tr][td]行1 列1[/td][td]行1 列2 [/td][td]行1 列3 [/td][/tr] [tr][td]行2 列1[/td][td]行2 列2 [/td][td]行2 列3 [/td][/tr] [/table]
discuz中列表是这样的:
无序号: [list] [*] [*] [/list] 有序号: [list=1] [*] [*] [/list]


我看到你的导入脚本中有2种http的写法:
https?: http(?:s)?:
是否都考虑了非https的情况?
如果没有,@fantasticfears要考虑下修改discourse中的pull request了。


(freemangl) #59

刚才用你的新修改的脚本尝试导入了下,直接就报错了:
discourse@ubuntu-app:/var/www/discourse$ RAILS_ENV=production bundle exec ruby script/import_scripts/discuz_x.rb bbcode-to-md script/import_scripts/discuz_x.rb:169: syntax error, unexpected tIDENTIFIER, expecting '}' salt: user['salt'], ^ script/import_scripts/discuz_x.rb:171: syntax error, unexpected tLABEL, expecting '=' created_at: user['regdate'] ? Time.zone.... ^ script/import_scripts/discuz_x.rb:171: syntax error, unexpected ',', expecting keyword_end script/import_scripts/discuz_x.rb:173: syntax error, unexpected tLABEL, expecting '=' ip_address: user['last_visit_ip'], ^ script/import_scripts/discuz_x.rb:174: syntax error, unexpected tLABEL, expecting '=' last_seen_at: user['last_visit_time'], ^ script/import_scripts/discuz_x.rb:175: syntax error, unexpected tLABEL, expecting '=' last_emailed_at: user['last_emailed_at'], ^ script/import_scripts/discuz_x.rb:176: syntax error, unexpected tLABEL, expecting '=' last_posted_at: user['last_posted_at'], ^ script/import_scripts/discuz_x.rb:177: syntax error, unexpected tLABEL, expecting '=' moderator: @moderator_group_id.include?(user['group_id']), ^ script/import_scripts/discuz_x.rb:177: syntax error, unexpected ',', expecting keyword_end script/import_scripts/discuz_x.rb:178: syntax error, unexpected ',', expecting keyword_end script/import_scripts/discuz_x.rb:179: syntax error, unexpected ',', expecting keyword_end script/import_scripts/discuz_x.rb:181: syntax error, unexpected tLABEL, expecting '=' location: first_exists(user['address']... ^ script/import_scripts/discuz_x.rb:181: syntax error, unexpected ',', expecting keyword_end script/import_scripts/discuz_x.rb:239: syntax error, unexpected '}', expecting keyword_end script/import_scripts/discuz_x.rb:957: syntax error, unexpected end-of-input, expecting keyword_end


(神楽坂玲奈) #60

稍微活一下,说不定能试着修点东西。。

  1. 表格问题,discourse 中的写法是怎样的,如果不修改而是直接用 bbcode 方式能工作么?
  2. 浏览数试着做一下
  3. 投票记录不打算做
  4. 列表试着做一下
  5. 自定义表情已经把dz语法改成 discourse 语法了,你在 discourse 设置里把表情按原来的名字加回来就得了。
  6. 故意不支持的,想要支持把中文插件字符集调一下就好。
  7. 都考虑了,这两种写法是等效的
  8. 缺个结束标记这样的问题手改一下就好了嘛。。
  9. 你的引用弄好了么?