없음 임시 파일은
소리가 난다. 여기에 my suggestions from another post입니다. 그것이 당신이 찾고있는 것이라면 그들은 당신을 도울 것입니다.
내가이 질문을 발견 한 이유는 CSV 파일을 저장하고 배경 작업을 해당 파일의 정보가있는 데이터베이스에 추가하려고했기 때문입니다.
나는 해결책이있다.
질문이 약간 불분명하고 나 자신의 질문을 게시하고 내 자신의 질문에 대답하기에는 너무 게으르므로 여기에 답변을 게시 할 것입니다. lol
다른 친구들과 마찬가지로 클라우드 스토리지 서비스에 파일을 저장하십시오. Amazon의 경우 :
# Gemfile
gem 'aws-sdk', '~> 2.0' # for storing images on AWS S3
gem 'paperclip', '~> 5.0.0' # image processor if you want to use images
이 정보가 필요합니다.또한 마이그레이션
# db/migrate/20000000000000_create_files.rb
class CreateFiles < ActiveRecord::Migration[5.0]
def change
create_table :files do |t|
t.attachment :import_file
end
end
end
및 모델
class Company < ApplicationRecord
after_save :start_file_import
has_attached_file :import_file, default_url: '/missing.png'
validates_attachment_content_type :import_file, content_type: %r{\Atext\/.*\Z}
def start_file_import
return unless import_file_updated_at_changed?
FileImportJob.perform_later id
end
end
과 작업을 필요 production.rb
# config/environments/development.rb
Rails.application.configure do
config.paperclip_defaults = {
storage: :s3,
s3_host_name: 's3-us-west-2.amazonaws.com',
s3_credentials: {
bucket: 'my-bucket-development',
s3_region: 'us-west-2',
access_key_id: ENV['AWS_ACCESS_KEY_ID'],
secret_access_key: ENV['AWS_SECRET_ACCESS_KEY']
}
}
end
에서 동일한 코드 그러나 다른 버킷 이름을 사용
class FileImportJob < ApplicationJob
queue_as :default
def perform(file_id)
file = File.find file_id
filepath = file.import_file.url
# fetch file
response = HTTParty.get filepath
# we only need the contents of the response
csv_text = response.body
# use the csv gem to create csv table
csv = CSV.parse csv_text, headers: true
p "csv class: #{csv.class}" # => "csv class: CSV::Table"
# loop through each table row and do something with the data
csv.each_with_index do |row, index|
if index == 0
p "row class: #{row.class}" # => "row class: CSV::Row"
p row.to_hash # hash of all the keys and values from the csv file
end
end
end
end
에서 너의 공동 제어 장치
def create
@file.create file_params
end
def file_params
params.require(:file).permit(:import_file)
end