使用文件顶部的配置块会引发错误

时间:2017-10-13 23:39:24

标签: sinatra

我试图在模型出现之前设置与数据库的连接(使用Sequel)。那一定是那样但是我得到了一个错误

undefined method `configure' for main:Object (NoMethodError)

这是代码,我没有看到在那里设置常量有什么问题,所以它可能是与配置块或config.ru相关的东西。

require 'sinatra/base'
require 'sequel'
require 'slim'
require 'sass'
require 'sinatra/flash'
require './sinatra/auth'

configure :development do
  password = ENV["PGPASSWORD"]
  DB = Sequel.postgres('development', user: 'postgres', password: password, host: 'localhost')
end

configure :production do
  DB = Sequel.connect(ENV['DATABASE_URL'])
end

这是机架文件。我试着在那里做连接语句但是失败了(到目前为止)

require 'sinatra/base'
require './main'
require './song'
require 'sequel'

map('/songs') { run SongController }
map('/') { run Website}

不理解为什么配置块不起作用。

编辑:我猜测因为对SongController的调用是在config.ru中,所以连接语句也需要在那里。 编辑:此外,由于这是一个模块化的应用程序,config.yml可能是我最好的选择。

1 个答案:

答案 0 :(得分:2)

您正在使用sinatra/base。这意味着您必须使用子类:

require 'sinatra/base'
require 'sequel'
require 'slim'
require 'sass'
require 'sinatra/flash'
require './sinatra/auth'

class MyApp < Sinatra::Base
  configure :development do
    password = ENV["PGPASSWORD"]
    DB = Sequel.postgres('development', user: 'postgres', password: password, host: 'localhost')
  end

  configure :production do
    DB = Sequel.connect(ENV['DATABASE_URL'])
  end

  run! if app_file == $0 
end

注意:你可以使用require sinatra而不使用子类的所有魔法都可以使用。或者,如果您需要模块化应用程序,请使用Sinatra::Application,您将拥有所有魔法。有关差异的完整报道,请参阅sinatra的自述文件。