【问题标题】:Sinatra method `development?` undefinedSinatra 方法“开发?”未定义
【发布时间】:2015-01-16 19:24:15
【问题描述】:

Sinatra 文档说 development? 将在开发环境时返回 true,但我收到一条错误消息,指出方法 development? 未定义。

我尝试跳过速记并测试 ENV['RAKE_ENV'] 变量本身,但它只是 nil。

这是我得到的错误:

undefined method `development?' for main:Object (NoMethodError)

这是触发错误的代码:

require 'dm-sqlite-adapter' if development?

我正在使用模块化风格的应用程序。上面的行是一个单独的文件,只管理模型。怎么回事?

【问题讨论】:

  • 如果你使用它作为一个符号(带有冒号)会发生什么需要 "xyz" if :development?
  • 已修复。非常感谢。如果你想把它作为答案,我很乐意接受它是正确的。符号和非符号语法有什么区别?我怎么知道什么时候使用哪个?
  • @EmanueleFeliziani 不能修复 ... if :any_symbol_whatsoever 将始终返回 true,因为符号不是 nil 或 false。
  • 是的@matt,你是对的。那么,有什么线索可能导致这个问题吗?
  • require 'dm-sqlite-adapter' if Sinatra::Base.environment == :development 将完成这项工作。

标签: ruby sinatra


【解决方案1】:

我也为此苦苦挣扎。这是我一路上发现的。

您需要“在”一个从 Sinatra::Base 继承的类(例如从 Base 继承的 Sinatra::Application)才能使用development? 方法,该方法在base.rb 中定义.

在经典的 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,在 (main:Object) 代码文本“外部”Sinatra::Base 子类中,需要遵循Arup's 说明:

if Sinatra::Base.environment == :development
    require 'awesome_print'
    require 'dotenv'
    Dotenv.load
    ...
end

【讨论】:

    【解决方案2】:

    由于使用的是模块化风格,所以需要在方法前添加模块命名空间Sinatra::Base。

    这样您就可以在应用程序的任何位置访问Sinatra::Base.development?。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-03
      相关资源
      最近更新 更多