【问题标题】:`method_missing': undefined method `aws_access_key' for {}:Figaro::Env`method_missing':{}:Figaro::Env 的未定义方法 `aws_access_key'
【发布时间】:2015-03-04 01:11:05
【问题描述】:

我目前在为我的 Rails 4 应用程序配置 Figaro 时遇到问题。每当我尝试运行 RSpec 或 rake db:migrate 时,都会遇到以下错误:

method_missing': undefined methodaws_access_key' 用于 {}:Figaro::Env

这是完整的错误信息供参考:

Louiss-MacBook-Pro:beautifulnow louismedina$ rspec
/Users/louismedina/.rvm/gems/ruby-2.1.5@beautifulnow-rails4/gems/figaro-0.7.0/lib/figaro/env.rb:9:in `method_missing': undefined method `aws_access_key' for #<Figaro::Env:0x007fc1b17749d8> (NoMethodError)
    from /Users/louismedina/Desktop/MindtonicMedia/beautifulnow/config/initializers/aws.rb:1:in `<top (required)>'
    from /Users/louismedina/.rvm/gems/ruby-2.1.5@beautifulnow-rails4/gems/activesupport-4.0.13/lib/active_support/dependencies.rb:223:in `load'
    from /Users/louismedina/.rvm/gems/ruby-2.1.5@beautifulnow-rails4/gems/activesupport-4.0.13/lib/active_support/dependencies.rb:223:in `block in load'
    from /Users/louismedina/.rvm/gems/ruby-2.1.5@beautifulnow-rails4/gems/activesupport-4.0.13/lib/active_support/dependencies.rb:214:in `load_dependency'
    from /Users/louismedina/.rvm/gems/ruby-2.1.5@beautifulnow-rails4/gems/activesupport-4.0.13/lib/active_support/dependencies.rb:223:in `load'
    from /Users/louismedina/.rvm/gems/ruby-2.1.5@beautifulnow-rails4/gems/railties-4.0.13/lib/rails/engine.rb:609:in `block (2 levels) in <class:Engine>'
    from /Users/louismedina/.rvm/gems/ruby-2.1.5@beautifulnow-rails4/gems/railties-4.0.13/lib/rails/engine.rb:608:in `each'
    from /Users/louismedina/.rvm/gems/ruby-2.1.5@beautifulnow-rails4/gems/railties-4.0.13/lib/rails/engine.rb:608:in `block in <class:Engine>'
    from /Users/louismedina/.rvm/gems/ruby-2.1.5@beautifulnow-rails4/gems/railties-4.0.13/lib/rails/initializable.rb:30:in `instance_exec'
    from /Users/louismedina/.rvm/gems/ruby-2.1.5@beautifulnow-rails4/gems/railties-4.0.13/lib/rails/initializable.rb:30:in `run'
    from /Users/louismedina/.rvm/gems/ruby-2.1.5@beautifulnow-rails4/gems/railties-4.0.13/lib/rails/initializable.rb:55:in `block in run_initializers'
    from /Users/louismedina/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/tsort.rb:226:in `block in tsort_each'
    from /Users/louismedina/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/tsort.rb:348:in `block (2 levels) in each_strongly_connected_component'
    from /Users/louismedina/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/tsort.rb:418:in `block (2 levels) in each_strongly_connected_component_from'
    from /Users/louismedina/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/tsort.rb:427:in `each_strongly_connected_component_from'
    from /Users/louismedina/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/tsort.rb:417:in `block in each_strongly_connected_component_from'
    from /Users/louismedina/.rvm/gems/ruby-2.1.5@beautifulnow-rails4/gems/railties-4.0.13/lib/rails/initializable.rb:44:in `each'
    from /Users/louismedina/.rvm/gems/ruby-2.1.5@beautifulnow-rails4/gems/railties-4.0.13/lib/rails/initializable.rb:44:in `tsort_each_child'
    from /Users/louismedina/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/tsort.rb:411:in `call'
    from /Users/louismedina/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/tsort.rb:411:in `each_strongly_connected_component_from'
    from /Users/louismedina/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/tsort.rb:347:in `block in each_strongly_connected_component'
    from /Users/louismedina/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/tsort.rb:345:in `each'
    from /Users/louismedina/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/tsort.rb:345:in `call'
    from /Users/louismedina/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/tsort.rb:345:in `each_strongly_connected_component'
    from /Users/louismedina/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/tsort.rb:224:in `tsort_each'
    from /Users/louismedina/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/tsort.rb:205:in `tsort_each'
    from /Users/louismedina/.rvm/gems/ruby-2.1.5@beautifulnow-rails4/gems/railties-4.0.13/lib/rails/initializable.rb:54:in `run_initializers'
    from /Users/louismedina/.rvm/gems/ruby-2.1.5@beautifulnow-rails4/gems/railties-4.0.13/lib/rails/application.rb:215:in `initialize!'
    from /Users/louismedina/.rvm/gems/ruby-2.1.5@beautifulnow-rails4/gems/railties-4.0.13/lib/rails/railtie/configurable.rb:30:in `method_missing'
    from /Users/louismedina/Desktop/MindtonicMedia/beautifulnow/config/environment.rb:5:in `<top (required)>'
    from /Users/louismedina/Desktop/MindtonicMedia/beautifulnow/spec/spec_helper.rb:3:in `require'
    from /Users/louismedina/Desktop/MindtonicMedia/beautifulnow/spec/spec_helper.rb:3:in `<top (required)>'
    from /Users/louismedina/Desktop/MindtonicMedia/beautifulnow/spec/controllers/admin/admin_controller_spec.rb:1:in `require'
    from /Users/louismedina/Desktop/MindtonicMedia/beautifulnow/spec/controllers/admin/admin_controller_spec.rb:1:in `<top (required)>'
    from /Users/louismedina/.rvm/gems/ruby-2.1.5@beautifulnow-rails4/gems/rspec-core-2.14.7/lib/rspec/core/configuration.rb:896:in `load'
    from /Users/louismedina/.rvm/gems/ruby-2.1.5@beautifulnow-rails4/gems/rspec-core-2.14.7/lib/rspec/core/configuration.rb:896:in `block in load_spec_files'
    from /Users/louismedina/.rvm/gems/ruby-2.1.5@beautifulnow-rails4/gems/rspec-core-2.14.7/lib/rspec/core/configuration.rb:896:in `each'
    from /Users/louismedina/.rvm/gems/ruby-2.1.5@beautifulnow-rails4/gems/rspec-core-2.14.7/lib/rspec/core/configuration.rb:896:in `load_spec_files'
    from /Users/louismedina/.rvm/gems/ruby-2.1.5@beautifulnow-rails4/gems/rspec-core-2.14.7/lib/rspec/core/command_line.rb:22:in `run'
    from /Users/louismedina/.rvm/gems/ruby-2.1.5@beautifulnow-rails4/gems/rspec-core-2.14.7/lib/rspec/core/runner.rb:80:in `run'
    from /Users/louismedina/.rvm/gems/ruby-2.1.5@beautifulnow-rails4/gems/rspec-core-2.14.7/lib/rspec/core/runner.rb:17:in `block in autorun'

有人对此有任何指导吗?谢谢。

【问题讨论】:

  • @sevenseacat:感谢您重新格式化终端输出。
  • 请注意,当我尝试打开 Rails 服务器时也会出现此错误。
  • 你能为你的 application.yml 提供虚拟数据吗?
  • 在我从 Github repo 克隆下来的应用程序中,有一个名为“application.yml.example”的文件。你指的是这个吗?
  • repo 有设置说明吗?通常您会将该文件重命名或创建其副本为application.yml 并将您的实际环境变量放入其中。

标签: ruby-on-rails ruby rspec figaro-ruby


【解决方案1】:

我似乎已经解决了这个问题。在我的“application.yml”文件中,我继续为这些变量提供了伪值,以便停止未定义的方法错误。

例如:

aws_access_key: '123456789'
aws_access_secret: '123456789'
aws_bucket: '123456789'

【讨论】:

    【解决方案2】:

    直到 Figaro 0.7,如果您尝试通过 Figaro.env.my_non_existant_key 访问不存在的密钥,您会遇到异常。该异常具有误导性,因为 figaro 使用 Ruby 的元编程特性并且可以在运行时定义方法(因此您可以调用方法 Figaro.env.my_key1,而不是调用 Figaro.env["my_key1"])。

    从 Figaro 1.0 开始,如果你调用 Figaro.env.my_non_existant_key,你会得到 nil 作为返回值。如果您想确保在密钥不存在时引发异常,您可以使用带有 'bang' Figaro.env.my_non_existant_key! 的新语法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-16
      • 1970-01-01
      • 2014-06-12
      • 2018-07-10
      • 1970-01-01
      • 1970-01-01
      • 2015-03-21
      相关资源
      最近更新 更多