Rails CarrierWave - я не могу сохранить локальные файлы в S3 и Heroku, но удаленные URL работают отлично. Что мне не хватает? - PullRequest
0 голосов
/ 11 января 2019

ПРОБЛЕМА: Итак, я провел последние 3 дня без каких-либо успехов. Что мне не хватает? Я использую драгоценные камни: CarrierWave, Fog и mini_magick для загрузки фотографий на реагировать нативно с react-native-image-picker.

Это таблица:

class CreateVisions < ActiveRecord::Migration[5.1]
  def change
    create_table :visions do |t|
      t.string :image
      t.text :description

      t.timestamps
    end
  end
end

visions_controller.rb:


  def create
    @vision = current_user&.visions.build(vision_params)
    @vision.remote_image_url = 'https://www.gstatic.com/webp/gallery3/1.sm.png' 
#without this line, whatever I pass as my image 
#parameter in my HTTP request on react native, it returns 
#'nil' for the image column. Without this line, even 
#when I pass a URL on react native, it saves the image column as nil.

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

vision.rb

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

end

реагировать на собственный HTTP-запрос

let response = await fetch('https://prana-app.herokuapp.com/v1/visions/', {
            method: 'POST',
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json',
                'X-User-Email': this.state.email,
                'X-User-Token': this.state.accessToken
            },
            body: JSON.stringify({
              vision: {
                description: 'dsfsfdsfdsfsd',
                image: this.state.uploadFile


# image param is being overwritten by that one line of code in my create 
# action in the visions_controller.rb
              }
            })
        });

setup_fog.rb

CarrierWave.configure do |config|
    config.fog_credentials = {
      provider: 'AWS',
      aws_access_key_id: ENV['AWS_ACCESS_KEY_ID'] || '',
      aws_secret_access_key: ENV['AWS_SECRET_ACCESS_KEY_ID'] || '',  
      region: 'us-west-2'
    }

    config.fog_directory = 'BUCKET_NAME'
    config.fog_public = false
    config.fog_attributes = {
      'Cache-Control' => "max-age=#{365.day.to_i}"
    }
  end

Когда у меня нет этой строки кода в моем visions_controller: @vision.remote_image_url = 'https://www.gstatic.com/webp/gallery3/1.sm.png'

локальный маршрут изображения передается в качестве параметра изображения объекту видения следующим образом:

Parameters: {"vision"=>{"description"=>"dsfsfdsfdsfsd", "image"=>"file:///BLABLABLA.jpg"}}

ОДНАКО, когда он сохраняет, он сохраняет как [[image: nil], [description: 'dsfsfdsfdsfsd']]

почему это происходит? Я пытался внедрить в переданный параметр различными способами в моем действии создания, но это, похоже, не работает:

  1. @vision.remote_image_url = params[:image]
  2. @vision.remote_image_url = params[:image][:tempfile]
  3. @vision.image = params[:image]

Как мне успешно передать локальный файл изображения для сохранения в S3 и HEROKU?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...