Ruby on rails,在服务器启动2.3上运行一个方法

我想在rails服务器启动时运行一个方法。 这是一种模型方法。

我尝试使用config / initializers / myfile.rb,但是在迁移期间调用了该方法,因此它从一个不存在的表中选择。

尝试环境.rb,但该类尚不存在(并且可能会有与迁移相同的问题)

我不知道将该方法放在何处,因此它只能在服务器启动时运行,而不能在迁移期间运行。

你可以采取一些措施来实际改善这一点。 问题是您在rake加载环境时运行此代码,但实际上您只想在Web服务器实例加载环境时运行此代码。 解决此问题的一种方法是在rake加载环境时设置一个值,并在设置该值时,不执行初始化程序代码。 你可以这样做:

task :environment => :disable_initializer task :disable_initializer do ENV['DISABLE_INITIALIZER_FROM_RAKE'] = 'true' end #In your initializer: ENV['DISABLE_INITIALIZER_FROM_RAKE'] || MyModel.method_call 

从我的理解中无法避免这种情况。 您可以将依赖于新表的初始化程序代码放在一个急救块中,以便安静下来,以便其他人可以运行迁移。

尝试在Rails :: initializer调用之后的run方法中将方法调用放在boot.rb中。 我现在没有在我面前使用rails,因为我正在工作,但我认为整个环境应该被加载,你可以在框架上运行方法。

我发现这很好用:

如果File.basename($ 0)==“rails”&& ARGV == []

它还检测到“rails generate …”