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
在运行代码的开发或生产中没有问题,为什么 aws_config 初始值设定项在 RSpec 下失败?
我的猜测是"测试"在您的配置文件中未设置/正确。作为额外的好处,当从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)
在此之后,所有其他事情应该正常工作。
engine.rb 不需要 gem。
这就是为什么Model 没有AWS_CONFIG,而 Rails 控制台有。
请参阅此答案,了解如何在引擎中加载宝石。