您好,
听起来这似乎是一个常见问题,如果是的话,我先表示歉意:我显然没有仔细查找
我该如何编写一个脚本来实现与向导相同的功能,而不是通过 Web 界面操作?
脚本的开头可以类似于规范测试中的 Fabricate(admin) fixture。也许可以从容器的 自定义部分 调用它。
提前感谢您的帮助!
您好,
听起来这似乎是一个常见问题,如果是的话,我先表示歉意:我显然没有仔细查找
我该如何编写一个脚本来实现与向导相同的功能,而不是通过 Web 界面操作?
脚本的开头可以类似于规范测试中的 Fabricate(admin) fixture。也许可以从容器的 自定义部分 调用它。
提前感谢您的帮助!
Wizard 一半是站点设置,一半是 API 调用。
对于 API 调用,您可以阅读 如何逆向工程 Discourse API;对于站点设置,请遵循以下示例:
但……也许我困惑的地方就在这里:为了调用 API,我需要 API 密钥。因此需要一个管理员用户……而我还没有(这个用户)。是否可以在没有 API 密钥的情况下调用 API?或者能否获取一个与用户无关且具有管理员凭据的 API 密钥?
看起来我应该使用 rake:admin 来创建管理员用户。不过,我认为管理员用户可能已经创建,只是尚未激活,因此我需要将其状态改为已激活。
或者,我是否可以创建一个 API 密钥,使用 api_key:create_master,然后利用它来创建管理员用户?
root@forum:/var/www/discourse# RAILS_DB=secondsite rake 'api_key:create_master[MASTERKEY]'
ad676e7413778aaaaa5d315c35f188591ef0edb4a4d4b2d644b9247a88421cfa
但看起来我还没有完全理解这个主密钥的使用方式,因为以下操作并未生效:
# curl -X GET "https://forum2/categories" -H "Accept: application/json" -H "Api-Key: ad676e7413778aa3a5d315c35f91ef0edb4a4d4b2d644b924b7a88421cfa"
{"errors":["You are not permitted to view the requested resource. The API username or key is invalid."],"error_type":"invalid_access"}
然而,如果我创建一个管理员用户:
root@forum:/var/www/discourse# RAILS_DB=secondsite rake 'admin:create'
Email: loic@dachary.org
Password:
Repeat password:
Ensuring account is active!
Account created successfully with username loic
Do you want to grant Admin privileges to this account? (Y/n) Y
Your account now has Admin privileges!
然后使用相同的主密钥并指定新创建的用户,操作就成功了:
curl -X GET "https://forum2/categories" -H "Accept: application/json" -H "Api-Key: ad676e7413778aa3a5d315c358591ef0edb4a4d4b2d644b924b7a88421cfa" -H "Api-Username: loic"
{"category_list":{"can...
并且该账户确实拥有管理员权限,因为它也可以访问 /admin/site_settings/category/branding。
你具体想实现什么?是想自动化创建管理员用户并设置一些配置吗?
是的,没错。我想从头创建一个新论坛,并通过一个无需任何浏览器交互的脚本来填充用户、分类和主题。
或许可以先创建该数据库,并在安装过程中将其恢复?
我没有任何数据库:用户、分类和主题将使用来自 mailman2 的数据创建。
如果您想导入数据,只需将其作为单独的进程执行即可。
如果那只是一次性操作,那倒没问题。但我想能够测试导入脚本。为了让测试运行,它必须从头开始创建一个 Discourse 实例,而不需要在自动化测试过程中进行任何手动干预 ![]()
为便于理解,这是我在将 Mailman2 导入 Discourse 过程中所做工作的一部分。该测试将通过 tox 运行,具体步骤如下:
假设是多站点安装,可以通过以下命令创建已批准的管理员用户和管理员 API 密钥:
docker exec app env RAILS_DB=secondsite rake 'api_key:create_master[MYKEY]'( echo user1@example.com ; echo $pass ; echo $pass ; echo ) | docker exec -i app env RAILS_DB=secondsite rake 'admin:create'注意:如果不在多站点安装环境中,只需移除 env RAILS_DB=secondsite 即可。
然后,通过以下命令验证其是否生效:
curl -X GET https://forum2/admin/backups -H "Accept: application/json" -H "Api-Key: 886171a73dd12759b5d6c1915b0f0d4475e8b3fff3d97954b95171200b6" -H "Api-Username: user1"
[]
(特别感谢 Jay Pfaffman 提供的灵感)
完成上述操作后,Discourse 不再需要运行向导,尽管系统仍会提示需要运行。
我靠做进口业务赚取了相当一部分收入。我相当确信,下面描述的方式,基本上是所有经常从事进口业务的人都在采用的做法。
我的建议是:
迁移任务与设置生产服务器的任务完全不同,两者的要求也各异。通常,迁移任务需要一些生产服务器不需要的东西(但我认为 mailmain 导入工具是个例外)。
在多站点服务器上运行迁移任务似乎尤其不明智。
感谢您的建议,我会遵循这个流程。有超过 100GB 的 mbox 归档文件,至少需要进行几次测试。
关于这一点……看起来 mbox 导入器总是创建新类别,无法使用现有类别。您对此是否有所了解?
我之前不知道 foolhardy 的含义:我很喜欢这个词,以后会再用 :- )
这恰恰是重新从头开始导入的一个糟糕主意。那很可能需要数周时间。当你重新运行导入器时,它只会导入新数据(而且我经常修改它以完全跳过旧数据)。
你可以通过创建 CategoryCustomField 来修改脚本,使其使用现有分类。我建议从一个空数据库开始,让脚本自动创建分类,之后你可以按需自定义它。当你再次运行脚本时,它会继续使用该分类。
您导入数据的真正风险在于,不同年份的数据可能存在差异,因此适用于 10 年前数据的处理方式可能不适用于 5 年前的数据,依此类推。不过,也许您会走运。
不确定这是否算作一种恭维 ![]()
我始终使用多站点进行导入。它允许多个论坛共存:一个供我调试,而客户可以在其相邻站点上审查导入内容。此外,将数据库复制以从特定点重新开始也非常容易。
等等……什么!?
哇,真是令人惊讶!你大概是地球上唯一一位不在 CDCK 工作、却比我更懂导入操作的人了。既然你使用多站点进行导入,那我也会考虑采用同样的方法。我通常会在同一台主机上启动独立的容器,前面加上 Traefik 作为代理,所以这算是在某种程度上类似,但又不完全一样。
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.