Ruby on rails 使用'rails server'命令启动所需的其他服务(resque、redis)

Ruby on rails 使用'rails server'命令启动所需的其他服务(resque、redis),ruby-on-rails,service,resque,Ruby On Rails,Service,Resque,我希望我的Rails开发环境能够在以下情况下为我自动启动redis和resque(以及其他项目中的mongod、mysql服务器等): 启动开发服务器时rails服务器 此外,如果以下情况检测到已经在运行的服务,并且如果没有运行,也启动它们,那就更好了: 运行测试时,Rake rspec,rspec/spec 启动rails控制台时 关闭rails服务器时,启动的子服务也应关闭 这种附加启动脚本的正确位置是什么 如何避免它们也在生产环境中启动(我通过/etc/init.d服务运行一切)?

我希望我的Rails开发环境能够在以下情况下为我自动启动redis和resque(以及其他项目中的mongod、mysql服务器等):

  • 启动开发服务器时
    rails服务器
此外,如果以下情况检测到已经在运行的服务,并且如果没有运行,也启动它们,那就更好了:

  • 运行测试时,Rake rspec,rspec/spec
  • 启动
    rails控制台时
关闭
rails服务器时
,启动的子服务也应关闭

这种附加启动脚本的正确位置是什么


如何避免它们也在生产环境中启动(我通过/etc/init.d服务运行一切)?

我认为在一些外部脚本中这样做确实更好。在rails服务器中执行此操作对于任何尝试您的代码的人来说都是非常烦人的

举个例子,在一年内,一位nez开发人员来到您的项目。如果您的rails服务器命令在后台启动一个类似的其他应用程序,他就可以被解定向

同样,如果这样做,您需要在rails环境中维护代码。可能有点棘手。维护独立脚本可能更有用


您可以在脚本目录中添加脚本。那是一个很好的练习。但是,当您使用手册启动命令时,用户不会这样做。

许多内置任务已经可以作为rake任务使用

您可以创建一个主rake任务来完成这一切

例如,使用resque,您会得到“rake resque:start”“rake resque:scheduler:start”等

您可以创建一个通用的“开始”任务,该任务依赖于其他任务。类似地,“停止”任务将关闭所有内容

所以你会这样做:

rake start # starts all associated processes
rake stop  # stops them all

当您最终将代码部署到其他地方时,从Capistrano使用这一点也非常有用。Rake任务很容易从Capistrano调用。

一个简单的启动脚本听起来是个不错的解决方案。是否有最佳实践?比如将它命名为./scripts/services和fire为
rails services
?我认为最好创建一个脚本/服务。可以是一些shell脚本。