【问题标题】:Ruby Sinatra-settings undefined method when accessing config file访问配置文件时的Ruby Sinatra-settings未定义方法
【发布时间】:2016-04-18 16:01:49
【问题描述】:

我正在使用 sinatra/sinatra-settings 开发一个 ruby​​ 网站,尝试从 config.yml 访问变量时出现以下错误。 我的主要应用是:

require 'sinatra'
require 'sinatra/reloader'
require 'sinatra/config_file'
require_relative 'web_data'


class Main < Sinatra::Base
  register Sinatra::ConfigFile
  config_file 'config.yml'

  puts settings.inspect
  c = Marshal.load(File.read(settings.svp)) rescue WebData.new(0)

  get '/a/:name' do
     c.increment
     File.open(settings.svp, 'w') {|f| f.write(Marshal.dump(c)) }
     "Hello, #{params[:name] ? params[:name] : 'world'}!"+c.getcount.to_s
  end

end

我的config.yaml 是:

svp: app/systemvalues

抛出的错误是:

2016-01-13 15:35:17 - NoMethodError - undefined method `svp' for Main:Class:

/home/miguel/workspace/personal_website/app/app.rb:16:in `block in <class:Main>'

我尝试添加寄存器 Sinatra::ConfigFile,但无济于事。

哦,然后将 settings.inspect 打印出Main(类名)

【问题讨论】:

  • 你的配置文件是config.yml还是config.yaml?如果您在 get 块内执行 p settings 会打印什么?
  • 嗨,config.ymlp settings 打印“主要”
  • 在旁注中,找到了一种解决方法:config = YAML.load(File.read('config.yml')) 和 `config['svp'] 来访问 yml 参数
  • puts settings.inspect 将始终是加载配置的类名。所以Main 是预期的结果。要检查您的配置文件是否实际加载,请尝试在config_file 'config.yml' 行的正下方添加puts settings.methods(false).inspect。如果加载正确,您应该会在结果中看到svp 方法。例如,[:app_file=, :app_file, :app_file?, :environments=, :environments, :environments?, :svp=, :svp, :svp?] 我猜这是一个相对路径问题。你用什么命令来启动你的应用程序?应用根目录中的ls -1 会返回什么?

标签: ruby sinatra


【解决方案1】:

验证您的 YAML 文件是否为“开发”、“测试”、“生产”三个基本环境设置了 svp 值:

svp:
  development: app/development-values
  test: app/test-values
  production: app/production-values

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-12
    • 2014-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多