【问题标题】:why does RSpec fail with undefined method [] Nil::NilClass for AWS_CONFIG['bucket']为什么 RSpec 以未定义的方法失败 [] Nil::NilClass for AWS_CONFIG['bucket']
【发布时间】:2016-06-08 22:28:09
【问题描述】:

config/initializers/aws_config.rb:

AWS_CONFIG = YAML.load_file("#{::Rails.root}/config/aws.yml")[Rails.env]

型号有代码:

self.bucket = AWS_CONFIG["bucket"]

测试结果:

 Failure/Error: self.bucket = AWS_CONFIG['bucket']
 NoMethodError:
   undefined method `[]' for nil:NilClass

开发或生产运行代码都没有问题,为什么在RSpec下aws_config初始化失败?

【问题讨论】:

  • 当您打开rails console 时,AWS_CONFIG 会给您什么?我的猜测是 test 键未在配置文件中设置/正确。请确认!
  • 你能粘贴你的 aws.yml 文件,只是隐藏原来的凭据
  • rails 控制台工作正常,AWS_CONFIG['bucket'] 设置了正确的值。我要补充一点,这是我正在测试的 Rails 引擎。 aws.yml 文件基本上就是下面答案中发布的内容。

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


【解决方案1】:

我的猜测是您的配置文件中没有设置/正确设置“测试”。 作为一个额外的好处,当从 config/*.yml 加载配置文件时,Rails 提供了一个辅助方法来获取配置。 假设您已经适当地嵌套了配置,您应该能够#{your app name here(find it in config/application.rb)}::Application.config_for(:aws),如果您设置正确,您应该能够获取值,而无需查看环境。

以这个为例

production:
  secret_key: 000894jnjfbdfu39
  secret_id: 123456
  bucket: shadow

development:
  secret_key: 000894jnjfbdfu39
  secret_id: 123456
  bucket: shadow

test:
  secret_key: 000894jnjfbdfu39
  secret_id: 123456
  bucket: meadow

在您的应用程序初始化程序中,您可以:

AWS_CONFIG = YourApp::Application.config_for(:aws) 在此之后所有其他事情都应该正常工作。

【讨论】:

    【解决方案2】:

    engine.rb 不需要 gem。

    这就是为什么模型没有 AWS_CONFIG,而 rails 控制台有。

    请参阅this answer,了解如何在引擎中加载宝石。

    【讨论】:

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