加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – Sinatra方法`开发?`undefined

发布时间:2020-12-17 03:24:16 所属栏目:百科 来源:网络整理
导读:Sinatra博士说发展?在环境开发时会返回true,但是我收到一个错误,说明方法开发?未定义. 我试着跳过速记并测试ENV [‘RAKE_ENV’]变量本身,但它只是零. 这是我得到的错误: undefined method `development?' for main:Object (NoMethodError) 这是触发错误的
Sinatra博士说发展?在环境开发时会返回true,但是我收到一个错误,说明方法开发?未定义.

我试着跳过速记并测试ENV [‘RAKE_ENV’]变量本身,但它只是零.

这是我得到的错误:

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

这是触发错误的代码:

require 'dm-sqlite-adapter' if development?

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

解决方法

我也在努力解决这个问题.这是我沿途发现的.

您需要在“内部”继承自Sinatra :: Base的类(例如继承自Base的Sinatra :: Application)才能使用该开发?方法,在base.rb中定义.

在经典的Sinatra应用程序中,您已经在“内部”编写了一个继承自Sinatra :: Base的类.那么发展呢?只会在“任何地方”工作.

在模块化的Sinatra开发中?只能在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类,并在这里检查开发?从ApplicationController类继承的子类也是如此:

class UserController < ApplicationController
  require 'dotenv' if development?
  ...
end

对于模块化的Sinatra,在(主要:对象)代码文本“外部”Sinatra :: Base子类中,您需要遵循Arup’s指令:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读