Ruby on rails Rails 4、回形针、亚马逊S3配置亚马逊路径

Ruby on rails Rails 4、回形针、亚马逊S3配置亚马逊路径,ruby-on-rails,amazon-s3,Ruby On Rails,Amazon S3,我正在尝试配置当我的对象成功上传到Amazon的S3服务时从回形针返回的端点。上载和所有内容都正常工作,但返回的URL不适合显示上载 现在,返回的url是http://s3.amazonaws.com/path/to/my/items(如下图所示) 我希望根目录特定于存储桶的位置,而不是s3.amazonaws.com(例如s3-us-west-1.amazonaws.com/path/to/my/items) 我应该在哪里尝试并配置不同的url路径(从s3.amazonaws.com到其他路

我正在尝试配置当我的对象成功上传到Amazon的S3服务时从回形针返回的端点。上载和所有内容都正常工作,但返回的URL不适合显示上载

现在,返回的url是
http://s3.amazonaws.com/path/to/my/items
(如下图所示)

我希望根目录特定于存储桶的位置,而不是
s3.amazonaws.com
(例如s3-us-west-1.amazonaws.com/path/to/my/items

我应该在哪里尝试并配置不同的url路径(从s3.amazonaws.com到其他路径)?我已尝试将具有上述路径的url添加到我的配置文件中,如:

  #Paperclip Amazon S3
  config.paperclip_defaults = {
      :storage => :s3,
      :url => "https://s3-us-west-1.amazonaws.com/",
      :s3_credentials => {
          :bucket => ENV['S3_BUCKET_NAME'],
          :access_key_id => ENV['AWS_ACCESS_KEY_ID'],
          :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']

      }

  }
这似乎没有任何效果。请告知我应该在哪里设置此选项


提前谢谢

如果要使用S3,我们发现您必须在实际模型中包含S3凭据(而不仅仅是配置文件)。我们的工作如下:

型号

#Image Upload 
Paperclip.options[:command_path] = 'C:\RailsInstaller\ImageMagick'
has_attached_file :image,
        :styles => { :medium => "x300", :thumb => "x100" },
        :default_url => "****",
        :storage => :s3,
        :bucket => '****',
        :s3_credentials => S3_CREDENTIALS,
            :url => "/:image/:id/:style/:basename.:extension",
            :path => ":image/:id/:style/:basename.:extension"
#Amazon AWS Config
development:
  access_key_id: **********
  secret_access_key: **************
  bucket: ****

production:
  access_key_id: ***********
  secret_access_key: ***********
  bucket: ****
config/application.rb

  # Paperclip (for Amazon) (we use EU servers)
  config.paperclip_defaults = {
    :storage => :s3,
    :s3_host_name => 's3-eu-west-1.amazonaws.com'
  }
config/s3.yml

#Image Upload 
Paperclip.options[:command_path] = 'C:\RailsInstaller\ImageMagick'
has_attached_file :image,
        :styles => { :medium => "x300", :thumb => "x100" },
        :default_url => "****",
        :storage => :s3,
        :bucket => '****',
        :s3_credentials => S3_CREDENTIALS,
            :url => "/:image/:id/:style/:basename.:extension",
            :path => ":image/:id/:style/:basename.:extension"
#Amazon AWS Config
development:
  access_key_id: **********
  secret_access_key: **************
  bucket: ****

production:
  access_key_id: ***********
  secret_access_key: ***********
  bucket: ****

希望这能有所帮助?

我在迁移到Spree 2.2时也遇到了同样的问题,但仍然不确定如何正确解决。似乎曲别针应该从配置中更新路径,但事实并非如此

由于缺少更好的解决方案,我已覆盖Spree::Image类,如下所示:

1 Spree::Image.class_eval do
2   has_attached_file :attachment, 
3     styles: { mini: '48x48>', small: '100x100>', product: '240x240>', large: '600x600>' },
4     default_style: :product,
5     url: '/spree/products/:id/:style/:basename.:extension',
6     path: 'products/:id/:style/:basename.:extension',
7     convert_options: { all: '-strip -auto-orient -colorspace sRGB' }·
8 end 

经过一些实验,我发现设置
:s3\u host\u name
全局就足够了。我最终也遇到了同样的问题,因为我设置了
:s3_region
,回形针(post-4.3.1,带有aws sdk 2)正在使用它来存储附件,但在生成URL时却没有


读者可能也会对此问题感兴趣:

您还可以将
:s3\u host\u name
键放入模型中。我不必在每个模型中写入凭据,只需在config/aws.yml中写入即可。替换
:url=>”https://s3-us-west-1.amazonaws.com/"
:s3\u host\u name=>“s3-us-west-1.amazonaws.com”
你会很好。