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

Using a config block at the top of the file throws error

我正在尝试在模型出现之前设置与数据库的连接(使用 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 可能是我的最佳选择。

您正在使用 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 == [=10=] 
end

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