Sinatra文档说当环境开发时development?
将返回true,但是我收到一条错误,指出方法development?
未定义。
我尝试跳过速记并测试ENV['RAKE_ENV']
变量本身,但它只是零。
这是我得到的错误:
undefined method `development?' for main:Object (NoMethodError)
这是触发错误的代码:
require 'dm-sqlite-adapter' if development?
我正在使用模块化风格的应用程序。上面的行是一个单独的文件,只管理模型。发生了什么事?
答案 0 :(得分:3)
我也在努力解决这个问题。这是我在此过程中发现的。
你需要"内部"继承自Sinatra :: Base的类(例如继承自Base的Sinatra :: Application),以便能够使用base.rb中定义的development?
方法。
在经典的Sinatra应用程序中,您已编码"内部"一个继承自Sinatra :: Base的类。因此,development?
只会在任何地方工作"。
在模块化的Sinatra中,development?
仅适用于Sinatra :: Base子类,例如:
require 'sinatra/base'
# Placing
# require 'dm-sqlite-adapter' if development?
# here will not work.
class ApplicationController < Sinatra::Base
require 'dm-sqlite-adapter' if development? # But here it works
...
end
# Placing
# require 'dm-sqlite-adapter' if development?`
# AFTER the above class will still not work
class SomethingElse
# nor will `development?` work here, since it is called inside
# a class without Sinatra::Base inheritance
...
end
所以基本上你可以使用继承自Sinatra :: Base的ApplicationController类,并在这里检查development?
。从ApplicationController类继承的子类也是如此:
class UserController < ApplicationController
require 'dotenv' if development?
...
end
对于模块化Sinatra,在(主要:对象)代码文本&#34;外部&#34; Sinatra :: Base子类,您需要遵循Arup's指令:
if Sinatra::Base.environment == :development
require 'awesome_print'
require 'dotenv'
Dotenv.load
...
end