2015-06-23 41 views
2

我正在嘗試開始測試我的應用程序(由於我正在編寫測試之後事實上沒有遵循好的TDD)。當我去運行它時,我得到了下面的錯誤,即使我現在沒有用uploader測試任何東西。Rspec Carrierwave/fog/aws

/home/action/.gem/ruby/2.1.1/gems/fog-core-1.30.0/lib/fog/core/service.rb:244:in `validate_options': Missing required arguments: aws_access_key_id, aws_secret_access_key (ArgumentError) 

我有我的AWS鍵在application.yml文件中使用費加羅寶石正確定義,所以我不知道爲什麼我得到這個錯誤。

當我從瀏覽器上傳圖片時,這一切都很完美。唯一的問題是當我使用rspec運行測試套件時出現這個錯誤。

carrierwave.rb

CarrierWave.configure do |config| 
    config.fog_credentials = { 
    provider:    'AWS',      # required 
    aws_access_key_id:  ENV['aws_access_key_id'],  # required 
    aws_secret_access_key: ENV['aws_secret_access_key'] # required 
    } 
    config.fog_directory = 'tracklocal'      # required 
    config.fog_public  = false   # optional, defaults to true 
    config.fog_attributes = {'Cache-Control'=>"max-age=#{365.day.to_i}"} # optional, defaults to {} 
end 

現在好了,我測試的是這樣的:

company_spec.rb

require 'spec_helper' 

describe Company do 

    it { should validate_presence_of(:company_name)} 

end 

,但我甚至不能運行該測試。我是一個小測試,所以任何幫助將在這裏讚賞。

完全跟蹤:

/home/action/.gem/ruby/2.1.1/gems/fog-core-1.30.0/lib/fog/core/service.rb:244:in `validate_options': Missing required arguments: aws_access_key_id, aws_secret_access_key (ArgumentError)                     
    from /home/action/.gem/ruby/2.1.1/gems/fog-core-1.30.0/lib/fog/core/service.rb:268:in `handle_settings'                                        
    from /home/action/.gem/ruby/2.1.1/gems/fog-core-1.30.0/lib/fog/core/service.rb:98:in `new'                                           
    from /home/action/.gem/ruby/2.1.1/gems/fog-core-1.30.0/lib/fog/storage.rb:25:in `new'                                            
    from /home/action/.gem/ruby/2.1.1/gems/carrierwave-0.10.0/lib/carrierwave/uploader/configuration.rb:83:in `eager_load_fog'                                   
    from /home/action/.gem/ruby/2.1.1/gems/carrierwave-0.10.0/lib/carrierwave/uploader/configuration.rb:96:in `fog_credentials='                                   
    from /home/action/workspace/servicepay/config/initializers/carrierwave.rb:2:in `block in <top (required)>'                                       
    from /home/action/.gem/ruby/2.1.1/gems/carrierwave-0.10.0/lib/carrierwave/uploader/configuration.rb:118:in `configure'                                    
    from /home/action/.gem/ruby/2.1.1/gems/carrierwave-0.10.0/lib/carrierwave.rb:14:in `configure'                                          
    from /home/action/workspace/servicepay/config/initializers/carrierwave.rb:1:in `<top (required)>'                                         
    from /home/action/.gem/ruby/2.1.1/gems/activesupport-4.1.0/lib/active_support/dependencies.rb:241:in `load'                                       
    from /home/action/.gem/ruby/2.1.1/gems/activesupport-4.1.0/lib/active_support/dependencies.rb:241:in `block in load'                                     
    from /home/action/.gem/ruby/2.1.1/gems/activesupport-4.1.0/lib/active_support/dependencies.rb:232:in `load_dependency'                                    
    from /home/action/.gem/ruby/2.1.1/gems/activesupport-4.1.0/lib/active_support/dependencies.rb:241:in `load'                                       
    from /home/action/.gem/ruby/2.1.1/gems/railties-4.1.0/lib/rails/engine.rb:648:in `block in load_config_initializer'                                     
    from /home/action/.gem/ruby/2.1.1/gems/activesupport-4.1.0/lib/active_support/notifications.rb:161:in `instrument'                                     
    from /home/action/.gem/ruby/2.1.1/gems/railties-4.1.0/lib/rails/engine.rb:647:in `load_config_initializer'                                       
    from /home/action/.gem/ruby/2.1.1/gems/railties-4.1.0/lib/rails/engine.rb:612:in `block (2 levels) in <class:Engine>'                                    
    from /home/action/.gem/ruby/2.1.1/gems/railties-4.1.0/lib/rails/engine.rb:611:in `each'                                            
    from /home/action/.gem/ruby/2.1.1/gems/railties-4.1.0/lib/rails/engine.rb:611:in `block in <class:Engine>'                                       
    from /home/action/.gem/ruby/2.1.1/gems/railties-4.1.0/lib/rails/initializable.rb:30:in `instance_exec'                                        
    from /home/action/.gem/ruby/2.1.1/gems/railties-4.1.0/lib/rails/initializable.rb:30:in `run'                                           
    from /home/action/.gem/ruby/2.1.1/gems/railties-4.1.0/lib/rails/initializable.rb:55:in `block in run_initializers'                                     
    from /home/action/.parts/packages/ruby2.1/2.1.1/lib/ruby/2.1.0/tsort.rb:226:in `block in tsort_each'                                         
    from /home/action/.parts/packages/ruby2.1/2.1.1/lib/ruby/2.1.0/tsort.rb:348:in `block (2 levels) in each_strongly_connected_component'                                
    from /home/action/.parts/packages/ruby2.1/2.1.1/lib/ruby/2.1.0/tsort.rb:418:in `block (2 levels) in each_strongly_connected_component_from'                               
    from /home/action/.parts/packages/ruby2.1/2.1.1/lib/ruby/2.1.0/tsort.rb:427:in `each_strongly_connected_component_from'                                    
    from /home/action/.parts/packages/ruby2.1/2.1.1/lib/ruby/2.1.0/tsort.rb:417:in `block in each_strongly_connected_component_from'                                  
    from /home/action/.gem/ruby/2.1.1/gems/railties-4.1.0/lib/rails/initializable.rb:44:in `each'                                          
    from /home/action/.gem/ruby/2.1.1/gems/railties-4.1.0/lib/rails/initializable.rb:44:in `tsort_each_child'                                       
    from /home/action/.parts/packages/ruby2.1/2.1.1/lib/ruby/2.1.0/tsort.rb:411:in `call'                                            
    from /home/action/.parts/packages/ruby2.1/2.1.1/lib/ruby/2.1.0/tsort.rb:411:in `each_strongly_connected_component_from'                                    
    from /home/action/.parts/packages/ruby2.1/2.1.1/lib/ruby/2.1.0/tsort.rb:347:in `block in each_strongly_connected_component'                                   
    from /home/action/.parts/packages/ruby2.1/2.1.1/lib/ruby/2.1.0/tsort.rb:345:in `each'                                            
    from /home/action/.parts/packages/ruby2.1/2.1.1/lib/ruby/2.1.0/tsort.rb:345:in `call'                                            
    from /home/action/.parts/packages/ruby2.1/2.1.1/lib/ruby/2.1.0/tsort.rb:345:in `each_strongly_connected_component'                                     
    from /home/action/.parts/packages/ruby2.1/2.1.1/lib/ruby/2.1.0/tsort.rb:224:in `tsort_each'                                           
    from /home/action/.parts/packages/ruby2.1/2.1.1/lib/ruby/2.1.0/tsort.rb:205:in `tsort_each'                                           
    from /home/action/.gem/ruby/2.1.1/gems/railties-4.1.0/lib/rails/initializable.rb:54:in `run_initializers'                                       
    from /home/action/.gem/ruby/2.1.1/gems/railties-4.1.0/lib/rails/application.rb:288:in `initialize!'                                         
    from /home/action/workspace/servicepay/config/environment.rb:5:in `<top (required)>'                                             
    from /home/action/.parts/packages/ruby2.1/2.1.1/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'                                     
    from /home/action/.parts/packages/ruby2.1/2.1.1/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'                                     
    from /home/action/workspace/servicepay/spec/spec_helper.rb:3:in `<top (required)>'                                             
    from /home/action/.parts/packages/ruby2.1/2.1.1/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'       
加入測試後

更新跟蹤:範圍有application.yml

/home/action/.gem/ruby/2.1.1/gems/fog-core-1.30.0/lib/fog/core/service.rb:244:in `validate_options': Missing required arguments: aws_access_key_id, aws_secret_access_key (ArgumentError)                     
    from /home/action/.gem/ruby/2.1.1/gems/fog-core-1.30.0/lib/fog/core/service.rb:268:in `handle_settings'                                        
    from /home/action/.gem/ruby/2.1.1/gems/fog-core-1.30.0/lib/fog/core/service.rb:98:in `new'                                           
    from /home/action/.gem/ruby/2.1.1/gems/fog-core-1.30.0/lib/fog/storage.rb:25:in `new'                                            
    from /home/action/workspace/servicepay/spec/support/fog_helper.rb:3:in `<top (required)>'                                           
    from /home/action/.gem/ruby/2.1.1/gems/activesupport-4.1.0/lib/active_support/dependencies.rb:247:in `require'                                      
    from /home/action/.gem/ruby/2.1.1/gems/activesupport-4.1.0/lib/active_support/dependencies.rb:247:in `block in require'                                    
    from /home/action/.gem/ruby/2.1.1/gems/activesupport-4.1.0/lib/active_support/dependencies.rb:232:in `load_dependency'                                    
    from /home/action/.gem/ruby/2.1.1/gems/activesupport-4.1.0/lib/active_support/dependencies.rb:247:in `require'                                      
    from /home/action/workspace/servicepay/spec/spec_helper.rb:11:in `block in <top (required)>'                                           
    from /home/action/workspace/servicepay/spec/spec_helper.rb:11:in `each'                                                
    from /home/action/workspace/servicepay/spec/spec_helper.rb:11:in `<top (required)>'                                             
    from /home/action/.parts/packages/ruby2.1/2.1.1/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'                                     
    from /home/action/.parts/packages/ruby2.1/2.1.1/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'                                     
    from /home/action/.gem/ruby/2.1.1/gems/rspec-core-3.3.1/lib/rspec/core/configuration.rb:1280:in `block in requires='                                     
    from /home/action/.gem/ruby/2.1.1/gems/rspec-core-3.3.1/lib/rspec/core/configuration.rb:1280:in `each'                                        
    from /home/action/.gem/ruby/2.1.1/gems/rspec-core-3.3.1/lib/rspec/core/configuration.rb:1280:in `requires='                                       
    from /home/action/.gem/ruby/2.1.1/gems/rspec-core-3.3.1/lib/rspec/core/configuration_options.rb:109:in `block in process_options_into'                                
    from /home/action/.gem/ruby/2.1.1/gems/rspec-core-3.3.1/lib/rspec/core/configuration_options.rb:108:in `each'                                      
    from /home/action/.gem/ruby/2.1.1/gems/rspec-core-3.3.1/lib/rspec/core/configuration_options.rb:108:in `process_options_into'                                  
    from /home/action/.gem/ruby/2.1.1/gems/rspec-core-3.3.1/lib/rspec/core/configuration_options.rb:21:in `configure'                                     
    from /home/action/.gem/ruby/2.1.1/gems/rspec-core-3.3.1/lib/rspec/core/runner.rb:101:in `setup'                                          
    from /home/action/.gem/ruby/2.1.1/gems/rspec-core-3.3.1/lib/rspec/core/runner.rb:88:in `run'                                           
    from /home/action/.gem/ruby/2.1.1/gems/rspec-core-3.3.1/lib/rspec/core/runner.rb:73:in `run'                                           
    from /home/action/.gem/ruby/2.1.1/gems/rspec-core-3.3.1/lib/rspec/core/runner.rb:41:in `invoke'                                          
    from /home/action/.gem/ruby/2.1.1/gems/rspec-core-3.3.1/exe/rspec:4:in `<top (required)>'                                           
    from /home/action/.gem/ruby/2.1.1/bin/rspec:23:in `load'                                                    
    from /home/action/.gem/ruby/2.1.1/bin/rspec:23:in `<main>'        

回答

0

您已經添加了您的AWS鍵將application.yml,但carrierwave不知道什麼他們。

你需要創建一個config/initializers/carrierwave_aws.rb初始化:

CarrierWave.configure do |config| 
    config.storage = :aws 
    config.aws_bucket = ENV.fetch('S3_BUCKET_NAME') 
    config.aws_acl = :'public-read' 
    config.asset_host = 'http://example.com' 
    config.aws_authenticated_url_expiration = 60 * 60 * 24 * 365 

    config.aws_credentials = { 
    access_key_id:  ENV.fetch('aws_access_key_id'), 
    secret_access_key: ENV.fetch('aws_secret_access_key'), 
    region:   ENV.fetch('aws_region') 
    } 
end 
+0

我有一個carrierwave.rb初始值設定項。我會將其添加到問題中。當我在瀏覽器中自己做時,Carrierwave沒有任何問題。當我嘗試運行我的rspec測試時,問題就出現了,所以我不確定爲什麼會發生這種情況。 –

0

如果使用阿菲,你一定不要使用範圍是什麼?

development: 
    aws_access_key_id: '#################' 
    aws_secret_access_key '##############' 

測試環境無法訪問。

+0

我認爲這將是問題,因爲我確實有這樣的範圍,但是當我添加一個測試:範圍我仍然有同樣的問題...有一些問題解決了(我添加了更新的跟蹤),但我仍然遇到同樣的核心問題。任何其他想法? –

+0

在application.yml中添加測試作用域後,您是否重新啓動了您的rails服務器? –

+0

是啊仍然沒有工作:/ –

0

我不得不從頭重置所有東西。我不太確定發生了什麼事,但我得到了它的工作。