如何在Rails服务器启动后运行我的ruby代码?

use*_*291 26 ruby ruby-on-rails ruby-on-rails-3

我试过了:

after_initialize do
  #code
end
Run Code Online (Sandbox Code Playgroud)

但是:(文件)

应用程序的某些部分,特别是观察者和路由,尚未在调用after_initialize块时设置.

我需要在我的代码中使用路由和记录器

有任何想法吗?

hou*_*se9 27

请参阅http://guides.rubyonrails.org/configuring.html中的第3.1节

我相信你会把这段代码放在config/application.rb中

config.after_initialize do
    # ....
end

# config.after_initialize takes a block which will be run after Rails has finished initializing the application. 
# That includes the initialization of the framework itself
Run Code Online (Sandbox Code Playgroud)

还有http://guides.rubyonrails.org/initialization.html

  • ......以及依赖于轨道的rake-tasks.有没有一种可靠的机制可以在服务器启动时获得****? (10认同)
  • 这也在调用Rails控制台(`rails c`)时运行. (7认同)

Aeg*_*gix 12

@ house9的答案是正确的,正如评论所指出的,这也将在运行rake任务,控制台等时执行.我使用以下内容来识别服务器实际执行的时间:

# application.rb
if defined?(Rails::Server)
  config.after_initialize do
    # Do stuff here
  end
end
Run Code Online (Sandbox Code Playgroud)

  • 这仅在使用 `rails server` 启动时才有效,如果直接使用 puma 启动,则不会......(并且 Puma::Server 始终被定义) (2认同)