我想在rails服务器启动时运行一个方法。这是一种模型方法。ruby on rails,在服务器启动时运行一个方法2.3
我尝试使用config/initializers/myfile.rb,但该方法在迁移过程中被调用,所以它从一个不存在的表中进行选择。
试过environment.rb中也有,但是该类还不存在(并可能有迁移同样的问题)
我不知道在哪里把这个方法,所以它只会上运行服务器启动,而不是在迁移过程中。
我想在rails服务器启动时运行一个方法。这是一种模型方法。ruby on rails,在服务器启动时运行一个方法2.3
我尝试使用config/initializers/myfile.rb,但该方法在迁移过程中被调用,所以它从一个不存在的表中进行选择。
试过environment.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
作品非常好,thx – Alistra 2010-09-26 21:06:35
这样的作品,它不漂亮,但它的作品 – tothemario 2011-09-20 17:21:46
尝试将您的方法调用放入boot.rb中Rails :: initializer调用后的run方法中。因为我在工作,所以现在我的面前没有钢轨,但我认为整个环境都应该按照这一点加载,并且您可以在框架上运行方法。
我的模型类不能从该文件访问(或者我不知道如何访问它)。 – Alistra 2010-09-24 21:06:34
无法从我的理解中避免这种情况。您可以将依赖于新表的初始化程序代码放置在救援模块中,以便将其中的内容安静下来,以便其他人可以运行迁移。
我发现这工作得很好:
如果File.basename($ 0)== “轨” & & ARGV == []
它还会检测到“导轨生成”。
问题是迁移需要引导程序。所以你可能只需要一个条件来找出它是如何开始的,但我不知道你的环境。 – 2010-09-24 20:51:32
是怎么开始的? – Alistra 2010-09-24 21:01:34