У меня есть модель Photo
, я использую paperclip (>= 3.4.0)
, ruby 2.3.7, Rails 3.2.
В моем photo.rb
у меня есть следующее:
class Photo < ActiveRecord::Base
attr_accessible :position, :source_uri, :img, :published
belongs_to :property
has_attached_file :img,
:styles => { :large => "590x380>", :medium => "380x200>", :small => "280x150>", :thumb => "100x75>" },
:url => "#{:source_uri}"
def source_uri=(uri)
self.img_file_name = "#{random_base_name}#{ext_from_mime}"
super
end
def source_uri
URI.unescape(super)
end
В моем config/environments/production.rb
, у меня есть это:
config.paperclip_defaults = {
:storage => :s3,
:bucket => ENV['MY_S3_BUCKET'],
:path => "uploads/myapp/:class/:attachment/:id/:style/:filename",
:s3_credentials => "#{Rails.root}/config/aws.yml",
:default_url => ":attachment/:class/:style/missing.png"
}
В моем aws.yml
есть следующее:
development:
access_key_id:
secret_access_key:
bucket:
staging:
access_key_id: <%= ENV["S3_ACCESS_KEY_ID"] %>
secret_access_key: <%= ENV["S3_SECRET_ACCESS_KEY"] %>
bucket: <%= ENV["S3_BUCKET"] %>
production:
access_key_id: <%= ENV["MY_S3_ACCESS_KEY_ID"] %>
secret_access_key: <%= ENV["MY_S3_SECRET_ACCESS_KEY"] %>
bucket: <%= ENV["MY_S3_BUCKET"] %>
Когда я загружаю изображение, оно, кажется, работает на основе журналов:
SQL (0.7ms) INSERT INTO "photos" ("created_at", "featured", "img_content_type", "img_file_name", "img_file_size", "img_fingerprint", "img_updated_at", "position", "property_id", "published", "source_uri", "updated_at") VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) RETURNING "id" [["created_at", Sat, 25 May 2019 05:52:17 UTC +00:00], ["featured", nil], ["img_content_type", nil], ["img_file_name", "65798ASDASD4"], ["img_file_size", nil], ["img_fingerprint", nil], ["img_updated_at", nil], ["position", nil], ["property_id", 18713], ["published", true], ["source_uri", "https://s3-us-west-2.amazonaws.com/propbmedia/BenjaminJohnson/31680-1.jpg"], ["updated_at", Sat, 25 May 2019 05:52:17 UTC +00:00]]
(0.9ms) COMMIT
Однако, если бы я поковырялся в своей консоли, я бы получил следующее:
irb(main):027:0> q.photos.first.source_uri
Photo Load (11.2ms) SELECT "photos".* FROM "photos" WHERE "photos"."property_id" = 16759 ORDER BY position ASC LIMIT 1
=> "https://s3-us-west-2.amazonaws.com/propbmedia/BenjaminJohnson/10192-16.jpg"
irb(main):028:0> p.photos.first.source_uri
=> "https://s3-us-west-2.amazonaws.com/propbmedia/BenjaminJohnson/33449-7.jpg"
irb(main):029:0> q.photos.first.img.url
Photo Load (8.2ms) SELECT "photos".* FROM "photos" WHERE "photos"."property_id" = 16759 ORDER BY position ASC LIMIT 1
=> "http://s3.amazonaws.com/johnson-benjamin/uploads/hojo/photos/imgs/208532/original/9086718487708773"
irb(main):030:0> p.photos.first.img.url
=> "http://s3.amazonaws.com/johnson-benjamin/uploads/hojo/photos/imgs/241108/original/7782737090666986"
Обратите внимание, что первые два URL-адреса в последнем фрагменте работают, но последние 2 возвращают ошибки «доступ запрещен».
Я также пытался загрузить аватар на S3, используя Comfy CMS, и это сработало. Конечно, я не думаю, что этим управляет Paperclip (я могу ошибаться), но по какой-то причине он загружает его куда-то еще. Вот пример URL для работающего аватара - http://s3.amazonaws.com/johnson-benjamin/uploads/hojo/agents/avatars/21/large/10PP-COMING-SOON.jpg?1558767320
Так что может быть не так с моей основной property.photos
моделью?
Почему это?