我试图在模型出现之前设置与数据库的连接(使用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可能是我最好的选择。
答案 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的自述文件。