2016-06-08 50 views
0

配置/初始化/ aws_config.rb:爲什麼RSpec的失敗,未定義的方法[]無:: NilClass爲AWS_CONFIG [ '鬥']

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下失敗?

+0

當您打開「rails控制檯」時,AWS_CONFIG會給您什麼?我的猜測是'test'鍵在配置文件中沒有設置/正確。請確認! – oreoluwa

+0

你可以粘貼你的aws.yml文件只是隱藏了憑據 – error2007s

+0

rails控制檯工作正常,AWS_CONFIG ['bucket']設置的是正確的值。我將補充說這是我正在測試的一個rails引擎。 aws.yml文件基本上是在下面的答案中發佈的。 –

回答

0

我的猜測是'test'沒有在您的配置文件中正確設置。 作爲額外的好處,當從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) 所有其他的事情應該在此之後正常工作。

0

engine.rb不需要寶石。

這就是爲什麼模型沒有AWS_CONFIG,而軌道控制檯。

請參閱:this answer,瞭解如何在發動機中加載寶石。

相關問題