【问题标题】:Ruby on Rails: script/my_script vs rake my_namespace:my_taskRuby on Rails:脚本/my_script 与 rake my_namespace:my_task
【发布时间】:2010-12-23 08:07:03
【问题描述】:
如何决定是将功能放入generator 之类的脚本还是rake(或thor 任务?
一些例子:
在thinking-sphinx 中,rake ts:start 将启动sphinx 守护进程。但在delayed_job 中,scipt/delayed_job start 将启动守护进程。或多或少相同的功能(显然)但不同的方法。
在两者之间进行选择是否有任何明显的原因,即为什么选择script/generate model 而不是rake generate:model
【问题讨论】:
标签:
ruby-on-rails
code-organization
【解决方案1】:
在过去,这是一个相当主观的问题。但是今天 Rails 3 在脚本目录中只有一个文件 (rails),所以它不再是放置脚本的首选位置。
如果您有一个 gem 需要为 Rails 应用程序定义一个或多个 Rake 任务,最好的方法是将 Railtie 添加到 gem (Railtie docs) 并使用 rake_tasks 方法。
【解决方案2】:
我根据是否需要加载整个 rails 环境/应用程序来运行脚本来决定两者之间的关系。如果是这样,那我就让它成为一个 rake 任务。
例如,如果我的脚本需要访问数据库对象或我在应用程序中使用的代码,那么可以肯定的是,我会将其设为 rake 任务。否则,将其简单地放在/script 中,它会运行得更快。如果您注意到,script/generate 之类的内容不需要查看您的 rails 应用程序,因此也不是 rake 任务。