2010-09-24 44 views
3

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

我尝试使用config/initializers/myfile.rb,但该方法在迁移过程中被调用,所以它从一个不存在的表中进行选择。

试过environment.rb中也有,但是该类还不存在(并可能有迁移同样的问题)

我不知道在哪里把这个方法,所以它只会上运行服务器启动,而不是在迁移过程中。

+0

问题是迁移需要引导程序。所以你可能只需要一个条件来找出它是如何开始的,但我不知道你的环境。 – 2010-09-24 20:51:32

+0

是怎么开始的? – Alistra 2010-09-24 21:01:34

回答

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 
+0

作品非常好,thx – Alistra 2010-09-26 21:06:35

+0

这样的作品,它不漂亮,但它的作品 – tothemario 2011-09-20 17:21:46

1

尝试将您的方法调用放入boot.rb中Rails :: initializer调用后的run方法中。因为我在工作,所以现在我的面前没有钢轨,但我认为整个环境都应该按照这一点加载,并且您可以在框架上运行方法。

+0

我的模型类不能从该文件访问(或者我不知道如何访问它)。 – Alistra 2010-09-24 21:06:34

2

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

0

我发现这工作得很好:

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

它还会检测到“导轨生成”。

相关问题