【问题标题】:missing required option :name缺少必需的选项:名称
【发布时间】:2018-06-18 15:25:07
【问题描述】:

我正在尝试设置 AWS 和 carrierwave 以从我的网站上传图片。当我尝试上传/更新帖子时,我不断收到错误“缺少必需的选项:名称”。我按照教程设置了我的 S3 帐户并设置了carrierwave.rb。如果您有任何想法,请告诉我!

carrierwave.rb

CarrierWave.configure do |config|
 config.storage    = :aws
 config.aws_bucket = ENV['S3_BUCKET_NAME']
 config.aws_acl    = 'public-read'
 config.aws_authenticated_url_expiration = 60 * 60 * 24 * 7
 config.aws_attributes = {
   expires: 1.week.from_now.httpdate,
   cache_control: 'max-age=604800'
 }

 config.aws_credentials = {
   access_key_id:     ENV['AWS_ACCESS_KEY_ID'],
   secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'],
   region:            ENV['AWS_REGION']
 }
end

.env 示例

S3_BUCKET_NAME=*****
AWS_ACCESS_KEY_ID=*****
AWS_SECRET_ACCESS_KEY=*****
AWS_REGION=*****

portfolio_uploader.rb

class PortfolioUploader < CarrierWave::Uploader::Base

  storage :aws

  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

  def extension_white_list
    %w(jpg jpeg gif png)
  end
end

【问题讨论】:

  • exact 错误是什么?您何时/何处看到此错误?
  • Completed 500 Internal Server Error in 102ms (ActiveRecord: 23.0ms) ArgumentError (missing required option :name) 是错误。当我尝试使用图像更新或创建投资组合项目时会发生这种情况。
  • 尝试使用ENV.fetch而不是ENV[]
  • 刚刚尝试 .fetch 仍然得到同样的错误
  • 你也可以发布错误日志吗?

标签: ruby-on-rails amazon-s3 carrierwave


【解决方案1】:

我也遇到过这个问题。错误信息具有欺骗性。我发现它实际上是导致问题的config.aws_bucket = ENV['S3_BUCKET_NAME'] 行。如果config.aws_bucket 是nil (例如当ENV['S3_BUCKET_NAME'] 未设置时,您将在控制台中得到具有欺骗性的missing required option :name。

【讨论】:

  • 你是怎么解决的?
  • 您将 S3_BUCKET_NAME 环境变量设置为正确的存储桶名称。
【解决方案2】:

我遇到了同样的问题,尝试重新启动 rails 服务器,当您对配置文件夹进行任何更改时,您必须重新启动服务器。

【讨论】:

    【解决方案3】:

    由于某种原因,我看到 Carrierwave.rb 文件已从我的应用程序的配置 >> Initializers 文件夹中删除。重新创建相同的问题。希望它可以帮助某人。

    【讨论】:

      猜你喜欢
      • 2014-03-12
      • 1970-01-01
      • 1970-01-01
      • 2014-05-31
      • 1970-01-01
      • 2013-07-25
      • 2017-03-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多