我可以在 rails 控制台中完成我想要完成的任务。但是,这些任务需要定期运行,我不想一个接一个地将每个命令输入到 rails 控制台中。我该如何在我的自托管 discourse 实例上运行 ruby 脚本?
此外,脚本将读取一个 csv 文件,我应该将此 csv 文件放在哪里,以便它仍然可以在 docker 容器内访问并且在更新后不会消失?
我可以在 rails 控制台中完成我想要完成的任务。但是,这些任务需要定期运行,我不想一个接一个地将每个命令输入到 rails 控制台中。我该如何在我的自托管 discourse 实例上运行 ruby 脚本?
此外,脚本将读取一个 csv 文件,我应该将此 csv 文件放在哪里,以便它仍然可以在 docker 容器内访问并且在更新后不会消失?
一种方法是上传文件,然后将 URL 存储在设置中。上传文件将防止其被删除。
您可以在插件中运行一个作业。Discourse 和 Pavilion 插件中有大量的作业示例。
我不知道我的用例是否比我最初解释的更简单。我通常这样做:
./launcher enter app
rails c
> u= User.find(1)
> some more code here
我想做的是:
./launcher enter app
./my_code.rb
其中 my_code.rb 包含我在 rails 控制台中之前执行的内容。
您说您希望“定期运行任务”。
如果这“对社区的生命周期”都可能,那么编写自己的插件来完成这项工作是值得的。这并不比进入 rails 控制台(混乱且风险更大!)难多少。
它还将允许您存储代码并对其进行妥善管理,并随着时间的推移对其进行改进。
或者,您可以定义一个 rake 任务,但您需要将其存储在某处,可能也是在插件中!
是的,这是我用词不当。我的意思是:我需要在社区的整个生命周期中多次运行这个作业。但是,没有固定的周期,何时需要运行取决于某些外部事件。因此,我将自己多次运行该任务,中间没有固定的时间间隔。
因此,rake 任务可能是您的首选解决方案。它专门为临时脚本运行而设计。我仍然会将其放入插件中,因为这样您就可以在 GitHub 上很好地管理它,而且您永远不会忘记它的位置或意外删除它。
这里有很多示例:discourse/lib/tasks at 1472e47aae5bfdfb6fd9abfe89beb186c751f514 · discourse/discourse · GitHub
您可以将其制作成一个 rake 任务,或者将其放入一个您应该手动从 /sidekiq 启动的作业中。
您可以从用户体验界面上传您的 csv 文件,并将其与建议的设置值一起传递,或者将其上传到一个主题中,让您的脚本获取该主题中最新的帖子/上传内容,或者将其上传到 /var/discourse/shared/standalone/xxx.csv 并在脚本中将其访问为 /shared/xxx.csv。或者,您应该使用 API 来完成整个事情,而不是上传 csv 文件。
您没有描述您正在做什么,只是描述了您可能不是最佳解决方案的解决方案。