首页 > 解决方案 > 使用 AWS 的 Heroku 上的 TypeError(没有将数组隐式转换为字符串)Rails App

问题描述

我正在关注 Michael Hart 的Ruby on Rails 教程并停留在第 13 章。我无法在部署在 Heroku 上的 Rails 应用程序上发布图像,但图像在开发服务器上工作得很好。我的carrier_wave.rb 最初看起来像

if Rails.env.production?
  CarrierWave.configure do |config|
    config.fog_credentials = {
      # Configuration for Amazon S3
      :provider              => 'AWS',
      :aws_access_key_id     => ENV['S3_ACCESS_KEY'],
      :aws_secret_access_key => ENV['S3_SECRET_KEY'],
      :region                => ENV['S3_REGION']
    }
    config.fog_directory     =  ENV['S3_BUCKET']
  end
end

当我的carrier_wave.rb 看起来像这样时,我收到了一个看起来像这样的错误

:reason_phrase => "Forbidden"

在 SO 上搜索后,我找到了这篇文章,并将我的 carrier_wave.rb 更改为如下所示

CarrierWave.configure do |config|
  config.root = Rails.root.join('tmp') # adding these...
  config.cache_dir = 'carrierwave' # ...two lines

  config.fog_credentials = {
    :provider               => 'AWS',                        # required
    :s3_access_key_id      => ENV['S3_ACCESS_KEY'],                        # required
    :s3_secret_access_key  => ENV['S3_SECRET_KEY'],                     # required
    :region                 => 'us-east-2',                  # optional, defaults to 'us-east-1'
    :host                   => 's3.example.com',             # optional, defaults to nil
    :endpoint               => 'https://s3.example.com:8080' # optional, defaults to nil
  }
  config.fog_directory  = ENV['S3_Bucket']                             # required
  config.fog_public     = false                                   # optional, defaults to true
  config.fog_attributes = {'Cache-Control'=>'max-age=315576000'}  # optional, defaults to {}
end

现在我收到错误

TypeError (no implicit conversion of Array into String)

我不知道这是否比原来的carrier_wave.rb更接近工作

我的 IAM 用户拥有“AmazonS3FullAccess”作为权限。我什至尝试将 S3 存储桶设置为公共访问,但没有成功。任何帮助或建议将不胜感激。

标签: ruby-on-railsrubyamazon-web-servicesherokurailstutorial.org

解决方案


推荐阅读