运行自定义ruby脚本

我可以在 rails 控制台中完成我想要完成的任务。但是,这些任务需要定期运行,我不想一个接一个地将每个命令输入到 rails 控制台中。我该如何在我的自托管 discourse 实例上运行 ruby 脚本?

此外,脚本将读取一个 csv 文件,我应该将此 csv 文件放在哪里,以便它仍然可以在 docker 容器内访问并且在更新后不会消失?

一种方法是上传文件,然后将 URL 存储在设置中。上传文件将防止其被删除。

您可以在插件中运行一个作业。Discourse 和 Pavilion 插件中有大量的作业示例。

1 个赞

我不知道我的用例是否比我最初解释的更简单。我通常这样做:

./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 任务,但您需要将其存储在某处,可能也是在插件中!

2 个赞

是的,这是我用词不当。我的意思是:我需要在社区的整个生命周期中多次运行这个作业。但是,没有固定的周期,何时需要运行取决于某些外部事件。因此,我将自己多次运行该任务,中间没有固定的时间间隔。

因此,rake 任务可能是您的首选解决方案。它专门为临时脚本运行而设计。我仍然会将其放入插件中,因为这样您就可以在 GitHub 上很好地管理它,而且您永远不会忘记它的位置或意外删除它。

这里有很多示例:discourse/lib/tasks at 1472e47aae5bfdfb6fd9abfe89beb186c751f514 · discourse/discourse · GitHub

2 个赞

您可以将其制作成一个 rake 任务,或者将其放入一个您应该手动从 /sidekiq 启动的作业中。

您可以从用户体验界面上传您的 csv 文件,并将其与建议的设置值一起传递,或者将其上传到一个主题中,让您的脚本获取该主题中最新的帖子/上传内容,或者将其上传到 /var/discourse/shared/standalone/xxx.csv 并在脚本中将其访问为 /shared/xxx.csv。或者,您应该使用 API 来完成整个事情,而不是上传 csv 文件。

您没有描述您正在做什么,只是描述了您可能不是最佳解决方案的解决方案。