Изображение ActionText, не сохраненное в Azure (или любом другом сервисе)

У меня есть приложение Rails с ActionText и ActiveStorage. Итак, у меня есть форма заявки с полем описания, где используется ActionText. Когда у меня настроена среда разработки для сохранения вложений на локальный диск, все работает нормально.

Но когда я настраиваю его на использование хранилища Azure, в журнале я вижу, что он, похоже, загружен (он возвращает URL), но когда я смотрю в Azure, сохраненного изображения нет. Это журнал:

Started POST "/rails/active_storage/direct_uploads" for ::1 at 2019-07-30 08:05:37 +0200
Processing by ActiveStorage::DirectUploadsController#create as JSON
  Parameters: {"blob"=>{"filename"=>"schaap.jpg", "content_type"=>"image/jpeg", "byte_size"=>56679, "checksum"=>"xNr4chw64aFTDzzvpmupBg=="}, "direct_upload"=>{"blob"=>{"filename"=>"schaap.jpg", "content_type"=>"image/jpeg", "byte_size"=>56679, "checksum"=>"xNr4chw64aFTDzzvpmupBg=="}}}
   (0.2ms)  BEGIN
  ActiveStorage::Blob Create (0.8ms)  INSERT INTO "active_storage_blobs" ("key", "filename", "content_type", "byte_size", "checksum", "created_at") VALUES ($1, $2, $3, $4, $5, $6) RETURNING "id"  [["key", "p83x87l66oibofrfmitfiqet120d"], ["filename", "schaap.jpg"], ["content_type", "image/jpeg"], ["byte_size", 56679], ["checksum", "xNr4chw64aFTDzzvpmupBg=="], ["created_at", "2019-07-30 06:05:38.851532"]]
   (0.6ms)  COMMIT
  AzureStorage Storage (0.9ms) Generated URL for file at key: p83x87l66oibofrfmitfiqet120d (https://<blob name>.blob.core.windows.net/<container-name>/p83x87l66oibofrfmitfiqet120d?sp=rw&sv=2016-05-31&se=2019-07-30T06%3A10%3A38Z&sr=b&sig=%2BicDHTsLBXWCIr00m4cbmcg3U6il5LMfhVcKwTq8dns%3D)
Completed 200 OK in 867ms (Views: 0.4ms | ActiveRecord: 5.7ms | Allocations: 70289)

Это в config/development.rb:

config.active_storage.service = :local

И это в storage.yml:

local:
  service: AzureStorage
  storage_account_name: "<account-name>"
  storage_access_key: "<access-key>"
  container: "<container>"

И правильный драгоценный камень используется:

gem 'azure-storage', require: false

Так что не так? Я пробовал то же самое с пространствами Digital Ocean, но с точно таким же результатом, поэтому он не связан с Azure.

1 ответ

Решение

Лично я никогда не использовал AzureStorage, но я использовал DigitalOcean Spaces. CORS - это то, что вам нужно, чтобы убедиться, что вы настроили его для прямой загрузки через ActiveStorage. Я могу ошибаться, но я думаю, что это может быть проблемой в вашем случае.

Я прогуглил "AzureStorage CORS" и нашел документацию MicroSoft по их настройке CORS.

При использовании Digital Ocean вы можете использовать их документацию для настройки s3cmd и использовать ее для настройки CORS для прямой загрузки.

После того, как вы настроите его, вы создадите файл CORS (cors.xml), например, в своем проекте:

<CORSConfiguration>
  <CORSRule>
    <AllowedOrigin>http://localhost:3000</AllowedOrigin>
    <AllowedOrigin>https://yourdomain.com</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
    <AllowedMethod>POST</AllowedMethod>
    <AllowedMethod>PUT</AllowedMethod>
    <AllowedHeader>*</AllowedHeader>
  </CORSRule>
</CORSConfiguration>

Затем вы можете использовать инструмент s3cmd, чтобы настроить его с помощью Digital Ocean, запустив в каталоге вашего проекта следующее:

s3cmd setcors cors.xml s3://yourbucketname

У GoRails есть отличное видео о том, как это сделать.

Digital Ocean также имеет пользовательский интерфейс CORS, но этого обычно недостаточно для моих нужд.

Другие вопросы по тегам