Моя настройка:
1) Я добавил CNAME в свой домен, чтобы указать S3.
assets.foo.com -> s3.amazonaws.com
2) У меня есть ведро с именем assets.foo.com
на S3
3) Код модели:
has_attached_file :report,
:storage => :s3,
:s3_credentials => {
:access_key_id => "xxxx",
:secret_access_key => "yyyy"},
:s3_permissions => 'private',
:s3_protocol => 'http',
:s3_host_alias => "assets.foo.com",
:url => ":s3_alias_url",
:bucket => "assets.foo.com",
:path => ":class/:attachment/:id_partition_:style.:extension"
Я получаю ожидаемый URL при вызове метода url
.
s.report.url
#http://assets.foo.com/study/report/..../abc.pdf
Я получаю сообщение об ошибке при попытке создать истекающий URL
s.report.expiring_url
AWS::S3::CurrentBucketNotSpecified: No bucket name can be inferred from your current connection's address (`s3.amazonaws.com')
from C:/Ruby187/lib/ruby/gems/1.8/gems/aws-s3-0.6.2/lib/aws/s3/base.rb:107:in `current_bucket'
from C:/Ruby187/lib/ruby/gems/1.8/gems/aws-s3-0.6.2/lib/aws/s3/base.rb:179:in `bucket_name'
from C:/Ruby187/lib/ruby/gems/1.8/gems/aws-s3-0.6.2/lib/aws/s3/object.rb:300:in `path!'
from C:/Ruby187/lib/ruby/gems/1.8/gems/aws-s3-0.6.2/lib/aws/s3/object.rb:291:in `url_for'
from C:/Ruby187/lib/ruby/gems/1.8/gems/paperclip-2.3.11/lib/paperclip/storage/s3.rb:98:in `expiring_url'
from (irb):4
В соответствии с руководством пользователя имя сегмента выводится, если указана клавиша :s3_host_alias
, а клавиша :url
установлена на ":s3_alias_url"
. Я настроил свою модель согласно инструкции. Я все еще столкнулся с ошибкой.
Мне удалось обойти проблему, добавив конфигурацию корзины, т.е.
has_attached_file :report,
:storage => :s3,
:s3_credentials => {
:access_key_id => "xxxx",
:secret_access_key => "yyyy"},
:s3_permissions => 'private',
:s3_protocol => 'http',
:s3_host_alias => "assets.foo.com",
:url => ":s3_alias_url",
:bucket => "assets.foo.com",
:path => ":class/:attachment/:id_partition_:style.:extension"
Когда я добавляю конфигурацию контейнера, метод expiring_url
игнорирует пользовательский псевдоним CNAME.
s.report.expiring_url
#http://s3.amazon.com/assets.foo.com/study/report/..../abc.pdf
Интересно, что функция url
генерирует ожидаемый URL, даже если присутствует конфигурация bucket
.
s.report.url
#http://assets.foo.com/study/report/..../abc.pdf
Примечание : я пробовал различные комбинации псевдонимов CNAME с одинаковым результатом:
assets.foo.com -> s3.amazonaws.com
assets.foo.com -> assets.foo.com.s3.amazonaws.com