Rails API - локальный файл не загружается в s3/Heroku

Это параметры, которые передаются моему HTTP-запросу POST, а именно:

Parameters: {
"vision"=>{
  "description"=>"dsfsfdsfdsfsd",
  "image"=>"file:///Users/ozgecokyasar/Library/Developer/
     CoreSimulator/Devices/EDD6C498-DACD-433E-B96D-3A30BAE7BA6D/data/
     Containers/Data/Application/
     6F633096-E665-46BB-952F-2775DD85A4A6/Library/Caches/
     ExponentExperienceData/%2540anonymous%252Fmanifestation-react- 
     3ac1cbe2-549f-
     49e7-8506-ef29638d1643/ImagePicker/0E426602-8110-4A9C-8B9A- 
     96D0BF1B2ECE.jpg"
  }
}

ОДНАКО, он сохраняется как таковой (изображение равно нулю):

SQL (2.1ms)  INSERT INTO "visions" ("image", "description", "created_at",
 "updated_at", "user_id") VALUES ($1, $2, $3, $4, $5) RETURNING "id" 
 [["image", nil], ["description", "dsfsfdsfdsfsd"], ["created_at", "2019-
01-12 01:14:34.341356"],["updated_at", "2019-01-12 01:14:34.341356"], 
["user_id", 3]]

Почему столбец изображения равен нулю?

visions_controller.rb:

  def create
    @vision = current_user&.visions.build(vision_params)
    @vision.remote_image_url = params[:image]

    @vision.save
    render :create, status: :created
  end

модель видения:

class Vision < ApplicationRecord
    belongs_to :user
    mount_uploader :image, ImageUploader

end

Однако я могу успешно сохранить удаленные URL-адреса в столбце изображений, если изменю действие создания вvisions_controller на:

  def create
    @vision = current_user&.visions.build(vision_params)
    @vision.remote_image_url = 'ANY REMOTE IMAGE URL'

    @vision.save
    render :create, status: :created
  end

Почему, когда я добавляю params[:image], передаваемый параметр изображения сохраняется как ноль?


person Ozge Cokyasar    schedule 12.01.2019    source источник
comment
Разве это не должно быть params[:vision][:image]?   -  person Sebastian Palma    schedule 12.01.2019
comment
@SebastianPalma Я изменил его на @vision.remote_image_url = params[:vision][:image] Однако я получаю следующий ответ: {"data":{"user":{"id":null,"image":{"url":null,"thumb":{"url":null},"small":{"url":null},"large":{"url":null},"medium":{"url":null}},"description":"dsfsfdsfdsfsd"}}} Параметры были отправлены следующим образом: {"vision"=>{"description"=>"dsfsfdsfdsfsd", "image"=>"file:///Users/ozgecokyasar/Library/Developer/CoreSimulator/Devices/EDD6C498-DACD-433E-B96D/data/Containers/Data/Application/2775DA4A6/Library/Caches/ExponentExperienceData/%2540anonymous%.jpg"}}   -  person Ozge Cokyasar    schedule 12.01.2019
comment
Вы можете это объяснить?   -  person Sebastian Palma    schedule 13.01.2019
comment
@SebastianPalma вышеизложенное дает мне следующую ошибку: ActiveRecord::RecordInvalid (Validation failed: Image trying to download a file which is not served over HTTP):. Итак, почему я не могу загрузить локальные файлы на S3, но удаленные URL-адреса загружаются отлично?   -  person Ozge Cokyasar    schedule 13.01.2019
comment
Ошибка проясняется, file:///Users/ozgecokyasar/Library/Developer/CoreSimulator/Devices/EDD6C498-DACD-433E-B96D/data/Containers/Data/Application/2775DA4A6/Library/Caches/ExponentExperienceData/%2540anonymous%.jpg", это указывает на локальный файл, который нигде не хранится.   -  person Sebastian Palma    schedule 13.01.2019
comment
поэтому мне нужно временно сохранить его или кэшировать и загрузить на S3 из временного каталога? Не могли бы вы объяснить? лол, извини, я нуб @SebastianPalma   -  person Ozge Cokyasar    schedule 13.01.2019
comment
Да, вам нужно, я забыл спросить, но предполагается, что вы должны использовать что-то вроде Carrierwave, Paperclip или ActiveStorage, файл должен быть извлечен, сохранен где-то, ваша домашняя папка недоступна из-за пределов вашего собственного ноутбука (по в настоящее время).   -  person Sebastian Palma    schedule 13.01.2019
comment
@SebastianPalma спасибо, я использую CarrierWave и Fog. Где я должен сохранить файл, прежде чем пытаться загрузить его на s3?   -  person Ozge Cokyasar    schedule 13.01.2019
comment
Если вы работаете с S3, вы должны добавить в конфигурацию свои учетные данные S3 и, в зависимости от того, как настроено, работать в локальном хранилище или S3 в зависимости от вашей текущей среды.   -  person Sebastian Palma    schedule 13.01.2019
comment
@SebastianPalma Я открыл новый вопрос:/ stackoverflow.com/questions/54172570/   -  person Ozge Cokyasar    schedule 13.01.2019