我的应用程序.rb:
S3_CREDENTIALS = YAML.load(File.read(File.expand_path(Rails.root.join("config","s3_credentials.yml"))))["production"]
# AWS::S3::Base.establish_connection! S3_CREDENTIALS['connection']
AWS::S3::Base.establish_connection!(
:access_key_id => S3_CREDENTIALS['access_key_id'],
:secret_access_key => S3_CREDENTIALS['secret_access_key'],
:persistent => true, # from http://www.ruby-forum.com/topic/110842
s3_credentials.yml:
production: &defaults
access_key_id: <%=ENV['AWS_ACCESS_KEY_ID']%>
secret_access_key: <%=ENV['AWS_SECRET_ACCESS_KEY']%>
persistent: true
我启动我的网络服务器并在我的 customers_controller 中检查连接:
Rails.logger.info("S3 service connected? " + AWS::S3::Base.connected?.to_s)
日志说它已连接:
S3 service connected? true
所以我知道以下内容:
我的环境变量是正确的。我的初始化程序和 yml 文件是正确的。宝石很好
那么我在控制器中做这样简单的事情:
@documents = Service.buckets()
我重新加载页面,我们开始:
AWS::S3::InvalidAccessKeyId in CustomersController#edit
The AWS Access Key Id you provided does not exist in our records.
踢球者——
当我将我的密钥和访问密钥以纯文本形式打印到 application.rb 文件中时(去掉 s3_credentials.yml 文件,只需将密钥放入 application.rb 文件中的适当行 - 我不会收到错误消息.
为什么使用带有 aws-s3 gem 的环境变量在使用 API 方法时会失败,但加载得很好?钥匙不能同时好坏。如果键错了,它根本不会连接,对吗?