Rails 3初始化程序只在`rails server`上运行而不是`rails generate`等

我有一个相对较小的初始化代码,我想在rails server运行时运行,但不是在我运行rails generaterails console或任何其他rails命令时(包括需要环境任务的rake任务)。 这段代码预先填充了一些缓存并且相对昂贵,所以我真的不希望它运行在除了rails s任何东西上

解决方案不满意:

Foreman等人。 意味着它将运行在一个不同的进程上,这个进程是(a)代表那一小段代码的顶部,(b)需要进程间通信而不是初始化程序提供的简单内存中方法。

在服务器上,我通过配置乘客将一个特殊的环境变量传递给rails来解决这个问题,告诉它它在服务器上下文中运行。 但是,如果可能的话,我希望它可以在所有开发人员的机器上开箱即用,而不需要记住以一种同样提供该环境变量的方式运行rails服务器(即IN_SERVER=true rails server )。

关于在rails server运行而不是在rake运行初始化程序时,一直都会问过这个问题。 但是我希望它只在服务器初始化中运行 – rake的修复很好但不全面。

你可以做一些事情,比如重写Rails::Server#initialize以便它在你的初始化器中调用你的初始化代码吗?

或者,更简单地说,只需将代码放在script/rails ,因为每次运行rails server都会运行,您可以轻松地在其中使用ARGVENV

这是一种方式:

 # config/initializers/my_init.rb Rails.application.config.after_initialize do # tweak this as required... unless defined?(::Rails::Generators) || defined?(::Rails::Console) || File.basename($0) =='rake' Rails.logger.info("Doing some init") # ... end end