6

我有一个 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很重要,所以我不想在两者中重复。如何定义可以从我的两个配置块中调用的方法?还是我只是以完全错误的方式解决这个问题?

4

2 回答 2

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
于 2012-04-05T02:55:10.887 回答
0

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

def self.read_config_file

那应该行得通。虽然没有测试。;)

于 2012-04-05T02:36:48.570 回答