【问题标题】:Rspec Carrierwave/fog/awsRspec 载波/雾/aws
【发布时间】:2015-06-23 06:44:32
【问题描述】:

我正在尝试开始测试我的应用程序(诚然没有遵循良好的 TDD,因为我是在事后编写测试)。当我去运行它时,我得到了以下错误,即使我现在没有用上传器测试任何东西。

/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) 

我使用 Figaro gem 在 application.yml 文件中正确定义了我的 aws 键,所以我不确定为什么会出现此错误。

当我自己从浏览器上传图片时,一切都运行良好。唯一的问题是当我使用 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 中添加 test:scope 后更新跟踪

/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>'                             

【问题讨论】:

    标签: ruby-on-rails amazon-web-services rspec fog


    【解决方案1】:

    您已将 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
    

    【讨论】:

    • 我确实有一个carrierwave.rb 初始化程序。我会把它添加到问题中。当我在浏览器中自己操作时,Carrierwave 工作没有问题。当我尝试只运行我的 rspec 测试时,问题就出现了,所以我不确定为什么会这样。
    【解决方案2】:

    如果你使用 figaro,你确定不使用范围吗?

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

    测试环境无法访问。

    【讨论】:

    • 我认为这肯定会是问题所在,因为我确实有这样的范围,但是当我添加一个测试时:范围我仍然遇到同样的问题......解决了一些问题(我添加了更新的跟踪),但我仍然遇到相同的核心问题。还有其他想法吗?
    • 在 application.yml 中添加测试范围后是否重新启动 Rails 服务器?
    • 你可以尝试在生产环境中运行你的服务器吗?
    • 当我尝试在本地执行此操作时,我不断遇到不相关的错误
    • 是的。当我测试了它的密钥和秘密时。
    【解决方案3】:

    我不得不从头开始重置所有内容。我不太确定发生了什么,但我得到了它的工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-14
      • 2012-03-16
      • 1970-01-01
      • 2012-08-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多