question2answer.rb 迁移错误

你好,

我尝试使用 question2answer.rb 导入脚本将我的站点迁移到 Discourse 平台。但在迁移过程中遇到了以下错误。

如何修复?:thinking: 我使用的是干净 Ubuntu 18.04 上的默认 Docker 容器。

正在导入用户

**回溯**(最近一次调用最后):

9: 来自 script/import_scripts/question2answer.rb:560:in `\u0026lt;main\u0026gt;'

8: 来自 /var/www/discourse/script/import_scripts/base.rb:47:in `perform'

7: 来自 script/import_scripts/question2answer.rb:71:in `execute'

6: 来自 script/import_scripts/question2answer.rb:85:in `import_users'

5: 来自 script/import_scripts/question2answer.rb:555:in `mysql_query'

4: 来自 /var/www/discourse/vendor/bundle/ruby/2.5.0/gems/rack-mini-profiler-1.0.2/lib/patches/db/mysql2.rb:22:in `query'

3: 来自 /var/www/discourse/vendor/bundle/ruby/2.5.0/gems/mysql2-0.5.2/lib/mysql2/client.rb:130:in `query'

2: 来自 /var/www/discourse/vendor/bundle/ruby/2.5.0/gems/mysql2-0.5.2/lib/mysql2/client.rb:130:in `handle_interrupt'

1: 来自 /var/www/discourse/vendor/bundle/ruby/2.5.0/gems/mysql2-0.5.2/lib/mysql2/client.rb:131:in `block in query'

/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/mysql2-0.5.2/lib/mysql2/client.rb:131:in `_query': **表 'primary_db.users' 不存在 (** **Mysql2::Error** **)**

The users table that it’s looking for does not exist. Do you see a table called “users”? Do you have the right database?

2 个赞

I believe that I have the right database as I finished importing the database (on Discourse server) using

mysql -uroot -p -e 'CREATE DATABASE q2a' 

mysql -uroot -p q2a < q2a_dump.sql

I was able to back up my new database using

mysqldump -u username -p database_to_backup > backup_name.sql

and I downloaded it on my computer to verify that I have the proper database.

I have a table called qa_users

That’s the default. Did you change the db_prefix to “primary_dB” for some reason?

It was already included in the importer script as follows.

  # CHANGE THESE BEFORE RUNNING THE IMPORTER

  DB_HOST ||= ENV['DB_HOST'] || "localhost"
  DB_NAME ||= ENV['DB_NAME']
  DB_PW ||= ENV['DB_PW']
  DB_USER ||= ENV['DB_USER']
  TIMEZONE ||= ENV['TIMEZONE'] || "America/Los_Angeles"
  TABLE_PREFIX ||= ENV['TABLE_PREFIX'] || "qa_"
  MAIN_APP_DB_NAME = "primary_db"

So I didn’t change MAIN_APP_DB_NAME part as I am not familiar with that.

Did you set those environment variables? DB_NAME TABLE_PREFIX and so on?

I set all environment variables that I quoted above.

What did you set TABLE_PREFIX to?

export TABLE_PREFIX=“qa_”

Sorry. I’m in my logins and didn’t read the code carefully.

I’m pretty sure that I wrote that script, but I didn’t see that main all stuff down in the query; I’m sure I didn’t write that.

You’ll need to edit the script to have it use the database and prefix that you set in the environment variables.

What should I do about this one?

You’ll need to rewrite all of the dB queries.

I am sorry, Jay. I am not quite sure what you mean by that? Could you please give me some pointers here? I hope that you don’t mean by rewriting the importer script of question2answer.

Thanks

Not the whole script, just the database queries, and really just the FROM part. If you have a budget I can fix it for you.

2 个赞

I don’t have much budget but I would like to import small data from my old forum.

What do you have in mind?

Send an email to support@literatecomputing.com.

If I can log in remotely to the machine where you’re running the import it’ll help, as I’ll be able to see whether it works without sending it to you, having you import, tell me what’s wrong, and trying again.

2 个赞

It seems the question2answer importer was written for a case where there is an additional set of tables in the database for another app that was integrated with it. That is what the MAIN_APP_DB_NAME refers to.

We have done an import for a standalone q2a site recently and we have a modified version of the script which does not depend on this extra database. @RGJ was going to clean it up and submit it back in the next few weeks.

4 个赞

[这里](https://gist.github.com/[Communiteq](https://www.communiteq.com) (前 DiscourseHosting)/769eff2014d5482f0ab776de03dc3349) 是我们修改后的导入器代码片段,因此您无需等待我清理完成即可使用;不过,代码本身已经相当完善了。

  • 移除对那个其他神秘数据库的依赖(该数据库可能是某种定制系统)
  • 导入评论
  • 导入最佳答案
5 个赞

Aw nice, thanks for that :beers:

1 个赞

在尝试将少量数据从我的旧论坛迁移时,使用 @RGJ 提供的[修改后的导入脚本](https://gist.github.com/[Communiteq](https://www.communiteq.com) (formerly DiscourseHosting)/769eff2014d5482f0ab776de03dc3349) 出现了以下错误:

正在加载现有群组...

正在加载现有用户...

正在加载现有分类...

正在加载现有帖子...

正在加载现有主题...

正在导入用户

**回溯**(最近一次调用在前):

11: from script/import_scripts/question2answer.rb:601:in `<main>'

10: from /var/www/discourse/script/import_scripts/base.rb:47:in `perform'

9: from script/import_scripts/question2answer.rb:70:in `execute'

8: from script/import_scripts/question2answer.rb:89:in `import_users'

7: from /var/www/discourse/script/import_scripts/base.rb:881:in `batches'

6: from /var/www/discourse/script/import_scripts/base.rb:881:in `loop'

5: from /var/www/discourse/script/import_scripts/base.rb:882:in `block in batches'

4: from script/import_scripts/question2answer.rb:106:in `block in import_users'

3: from /var/www/discourse/script/import_scripts/base.rb:247:in `create_users'

2: from /var/www/discourse/script/import_scripts/base.rb:247:in `each'

1: from /var/www/discourse/script/import_scripts/base.rb:278:in `block in create_users'

/var/www/discourse/script/import_scripts/base.rb:866:in `print_status': **undefined method `to_f' for #<Mysql2::Result:0x000056370b7c1f80> (** **NoMethodError** **)**

**可能的替代方法:to_s**

**to_a**

**to_h**

我不清楚是什么导致了这个错误?:confused: