我想在rails服务器启动时运行一个方法。这是一种模型方法。
我尝试使用config / initializers / myfile.rb,但是在迁移期间调用了该方法,因此它从一个不存在的表中选择。
尝试了environment.rb,但该类尚不存在(并且可能会出现与迁移相同的问题)
我不知道该放置该方法的位置,因此它只能在服务器启动时运行,而不能在迁移期间运行。
答案 0 :(得分:3)
你可以采取一些措施来实际改善这一点。问题是您在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
答案 1 :(得分:2)
根据我的理解,没有办法避免这种情况。您可以将依赖于新表的初始化程序代码放在一个急救块中,以便让其他人安静下来,以便其他人可以运行迁移。
答案 2 :(得分:1)
尝试在Rails :: initializer调用之后的run方法中将方法调用放在boot.rb中。我现在没有在我面前使用rails,因为我在工作,但我认为整个环境应该被加载,你可以在框架上运行方法。
答案 3 :(得分:0)
我发现这很有效:
如果File.basename($ 0)==“rails”&& ARGV == []
它还会检测“rails generate ..”