Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在开发中将文件上载到Amazon s3时遇到问题_Ruby On Rails_Ruby_Amazon S3_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 在开发中将文件上载到Amazon s3时遇到问题

Ruby on rails 在开发中将文件上载到Amazon s3时遇到问题,ruby-on-rails,ruby,amazon-s3,ruby-on-rails-4,Ruby On Rails,Ruby,Amazon S3,Ruby On Rails 4,能够在Heroku的生产环境中将文件上载到AmazonS3,但在我的开发环境中无法这样做。以下是目前的情况 Development.rb config.paperclip_defaults = { :storage => :s3, :s3_credentials => { :bucket => ENV['S3_BUCKET_NAME'], :access_key_id => ENV['AWS_ACCESS_KEY_ID'], :secret

能够在Heroku的生产环境中将文件上载到AmazonS3,但在我的开发环境中无法这样做。以下是目前的情况

Development.rb

config.paperclip_defaults = {
  :storage => :s3,
  :s3_credentials => {
    :bucket => ENV['S3_BUCKET_NAME'],
    :access_key_id => ENV['AWS_ACCESS_KEY_ID'],
    :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
  }
}
按照的建议,我在配置目录中创建了一个文件
application.yml
,其中包含以下代码:

AWS_ACCESS_KEY_ID: "***"
AWS_SECRET_ACCESS_KEY: "***"
AWS_BUCKET: "themoderntrunk"
但我没有改变我的设计模式

has_attached_file :photo, :styles => { :thumbnail => "80x80#", 
                                       :small => "150x150>"
                                     }
当我现在上传文件的时候,我得到了这个错误

missing required :bucket option

我见过很多人都有同样的问题,但没有一个答案能解决我的问题。任何指导都将不胜感激。谢谢。

具有寓意的是,这个特定的问题通常是通过使用Ruby的规范云服务库来解决的

# Gemfile
gem 'fog'
运行
bundle install
,然后按如下方式修改配置文件:

# config/environments/development.rb
Paperclip::Attachment.default_options.merge!(
  :storage => :fog,
  :fog_credentials => {
    :provider => 'AWS',
    :aws_access_key_id => ENV['AWS_ACCESS_KEY_ID'],
    :aws_secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'],
  },
  :fog_directory => ENV['AWS_BUCKET'],
  :bucket => ENV['AWS_BUCKET']
)
重新启动服务器以重新加载环境–上载应该可以工作

更新

在重读您的问题时,我注意到您要传递一个名为
ENV['S3\u BUCKET\u NAME']
的环境全局变量,但实际上应该传递的变量名为
ENV['AWS\u BUCKET']
。我怀疑这就是抛出
missing required:bucket选项的原因。重命名变量可能会解决原始问题:

# config/environments/development.rb
config.paperclip_defaults = {
  :storage => :s3,
  :s3_credentials => {
    :bucket => ENV['AWS_BUCKET'], # Matches global declaration in `application.yml`
    :access_key_id => ENV['AWS_ACCESS_KEY_ID'],
    :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
  }
}

您是否重新启动了服务器以将
应用程序.yml
加载到您的环境中?是的,我已经重新启动了服务器。我是否应该使用与我在生产中使用的存储桶不同的存储桶?这不重要,IFAIK。我已经用一个可能的修正更新了我的答案。好吧,我现在就这么做,看看会发生什么。这个gem是否应该改变我的生产环境中的任何东西?它不应该改变,尽管你也可以在生产环境中使用Fog进行部署–这是我在自己的部署中使用的。这解决了缺少的bucket错误,但现在给了我缺少的
必需参数:aws\u access\u key\id,aws\u secret\u access\u key
error。我要研究如何解决这个问题