如何定义从模块化sinatra应用程序的配置块调用的方法?

时间:2012-04-05 02:25:14

标签: ruby sinatra

我有一个Sinatra应用程序,煮沸了,看起来基本上是这样的:

class MyApp < Sinatra::Base

  configure :production do
    myConfigVar = read_config_file()
  end

  configure :development do
    myConfigVar = read_config_file()
  end

  def read_config_file()
    # interpret a config file
  end

end

不幸的是,这不起作用。我得到undefined method read_config_file for MyApp:Class (NoMethodError)

read_config_file中的逻辑非常重要,所以我不想在两者中都重复。如何定义可以从我的配置块调用的方法?或者我只是以完全错误的方式解决这个问题?

2 个答案:

答案 0 :(得分:5)

在读取文件时似乎执行了configure块。您只需在配置块之前移动方法的定义,并将其转换为类方法:

class MyApp < Sinatra::Base

  def self.read_config_file()
    # interpret a config file
  end

  configure :production do
    myConfigVar = self.read_config_file()
  end

  configure :development do
    myConfigVar = self.read_config_file()
  end

end

答案 1 :(得分:0)

在评估类定义时运行配置块。因此,上下文是类本身,而不是实例。因此,您需要一个类方法,而不是实例方法。

def self.read_config_file

那应该有用。没有测试过。 ;)