如何定义一个从模块化西纳特拉应用程序的配置模块调用的方法?(How to define a meth

2019-09-16 08:48发布

我有一个西纳特拉的应用程序,煮下来,基本上是这样的:

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是不平凡的,所以我不想在这两个复制。 我如何定义一个可以从我的两个配置块被调用的方法? 或者,我只是在接近完全错误的方式这个问题?

Answer 1:

看来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


Answer 2:

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

def self.read_config_file

这应该工作。 还没虽然测试。 ;)



文章来源: How to define a method to be called from the configure block of a modular sinatra application?
标签: ruby sinatra