คลิปหนีบกระดาษเลิกใช้แล้ว
สำหรับโปรเจ็กต์ใหม่ เราขอแนะนำ ActiveStorage ของ Rails
สำหรับโปรเจ็กต์ที่มีอยู่ โปรดปรึกษาและสนับสนุนคู่มือการย้ายข้อมูลซึ่งมีให้บริการเป็นภาษาอังกฤษ สเปน และวิดีโอที่บันทึกที่ RailsConf 2019 คุณยังอาจต้องการบทช่วยสอนการย้ายข้อมูลอื่นที่ Doorkeeper ใช้อีกด้วย
สำหรับโครงการที่มีอยู่ Kreeti ยังคงรักษา kt-paperclip ซึ่งเป็นทางแยกของคลิปหนีบกระดาษอย่างต่อเนื่อง
เราจะเปิดประเด็นต่างๆ ไว้เป็นกระดานสนทนา เท่านั้น เรา ไม่ รับประกันการตอบกลับจากเราในประเด็นต่างๆ รายงานข้อผิดพลาดทั้งหมดควรไปที่ kt-paperclip
เราไม่ยอมรับคำขอดึงข้อมูลอีกต่อ ไป ยกเว้น คำขอดึงข้อมูลตามคำแนะนำในการย้ายข้อมูล คำขอดึงอื่นๆ ทั้งหมดจะถูกปิดโดยไม่มีการรวมเข้าด้วยกัน
master
โปรดตรวจสอบเอกสารสำหรับรุ่นคลิปหนีบกระดาษที่คุณใช้: https://github.com/thintbot/paperclip/releases
ความต้องการ
ทับทิมและราง
หน่วยประมวลผลภาพ
file
การติดตั้ง
เริ่มต้นอย่างรวดเร็ว
โมเดล
การโยกย้าย
แก้ไขและมุมมองใหม่
แก้ไขและมุมมองใหม่ด้วยแบบฟอร์มธรรมดา
คอนโทรลเลอร์
ดูตัวช่วย
การตรวจสอบไฟล์ที่มีอยู่
การลบสิ่งที่แนบมา
การใช้งาน
การตรวจสอบ
ความเป็นสากล (I18n)
การตรวจสอบความปลอดภัย
ค่าเริ่มต้น
การโยกย้าย
เพิ่มคอลัมน์เอกสารแนบลงในตาราง
คำจำกัดความของสคีมา
ไวยากรณ์วินเทจ
พื้นที่จัดเก็บ
ทำความเข้าใจเรื่องการจัดเก็บข้อมูล
อะแดปเตอร์ IO
โพสต์การประมวลผล
ตัวประมวลผลไฟล์แนบแบบกำหนดเอง
กิจกรรม
URI ทำให้งงงวย
เช็คซัม / ลายนิ้วมือ
การเก็บรักษาไฟล์สำหรับ Soft-Delete
การกำหนดค่าแบบไดนามิก
สไตล์ไดนามิก:
โปรเซสเซอร์แบบไดนามิก:
การบันทึก
การปรับใช้
รูปแบบไฟล์แนบ
การทดสอบ
มีส่วนร่วม
ใบอนุญาต
เกี่ยวกับ Think Bot
คลิปหนีบกระดาษมีวัตถุประสงค์เพื่อเป็นไลบรารีไฟล์แนบที่ใช้งานง่ายสำหรับ ActiveRecord จุดประสงค์เบื้องหลังคือเพื่อให้การตั้งค่าง่ายที่สุดเท่าที่จะเป็นไปได้และจัดการไฟล์ให้มากที่สุดเท่าที่จะเป็นไปได้ ซึ่งหมายความว่าไฟล์เหล่านี้จะไม่ถูกบันทึกลงในตำแหน่งสุดท้ายบนดิสก์ และจะไม่ถูกลบหากตั้งค่าเป็นศูนย์ จนกว่าจะมีการเรียก ActiveRecord::Base#save โดยจะจัดการการตรวจสอบตามขนาดและการมีอยู่ หากจำเป็น สามารถเปลี่ยนรูปภาพที่กำหนดให้เป็นภาพขนาดย่อได้หากจำเป็น และข้อกำหนดเบื้องต้นนั้นง่ายพอ ๆ กับการติดตั้ง ImageMagick (ซึ่งสำหรับระบบที่ใช้ Unix ที่ทันสมัยที่สุดนั้นง่ายพอ ๆ กับการติดตั้งแพ็คเกจที่เหมาะสม) ไฟล์แนบจะถูกบันทึกลงในระบบไฟล์และอ้างอิงในเบราว์เซอร์ด้วยข้อกำหนดที่เข้าใจง่าย ซึ่งมีค่าเริ่มต้นที่สมเหตุสมผลและมีประโยชน์
ดูเอกสารประกอบสำหรับ has_attached_file
ใน Paperclip::ClassMethods
สำหรับตัวเลือกโดยละเอียดเพิ่มเติม
RDoc ฉบับสมบูรณ์ออนไลน์อยู่
ตอนนี้คลิปหนีบกระดาษต้องใช้เวอร์ชัน Ruby >= 2.1 และเวอร์ชัน Rails >= 4.2 (เฉพาะในกรณีที่คุณใช้คลิปหนีบกระดาษกับ Ruby on Rails)
ต้องติดตั้ง ImageMagick และคลิปหนีบกระดาษต้องสามารถเข้าถึงได้ เพื่อให้แน่ใจว่าเป็นเช่นนั้น บนบรรทัดคำสั่งของคุณ ให้รัน which convert
(หนึ่งในยูทิลิตี้ ImageMagick) นี่จะให้เส้นทางที่ติดตั้งยูทิลิตี้นั้นแก่คุณ ตัวอย่างเช่น อาจส่งคืน /usr/local/bin/convert
จากนั้น ในไฟล์กำหนดค่าสภาพแวดล้อมของคุณ ให้คลิปหนีบกระดาษรู้ว่าต้องค้นหาที่นั่นโดยเพิ่มไดเร็กทอรีนั้นลงในพาธ
ในโหมดการพัฒนา คุณอาจเพิ่มบรรทัดนี้ใน config/environments/development.rb)
:
Paperclip.options[:command_path] = "/usr/local/bin/"
หากคุณใช้ Mac OS X คุณจะต้องเรียกใช้สิ่งต่อไปนี้ด้วย Homebrew:
brew install imagemagick
หากคุณกำลังจัดการกับการอัปโหลด PDF หรือใช้งานชุดทดสอบ คุณจะต้องติดตั้ง GhostScript ด้วย บน Mac OS X คุณสามารถติดตั้งได้โดยใช้ Homebrew:
brew install gs
หากคุณใช้ Ubuntu (หรือ Linux พื้นฐาน Debian) คุณจะต้องเรียกใช้สิ่งต่อไปนี้ด้วย apt-get:
sudo apt-get install imagemagick -y
file
คำสั่ง file
Unix จำเป็นสำหรับการตรวจสอบประเภทเนื้อหา ยูทิลิตี้นี้ไม่สามารถใช้งานได้ใน Windows แต่มาพร้อมกับ Ruby Devkit ดังนั้นผู้ใช้ Windows จะต้องตรวจสอบให้แน่ใจว่าได้ติดตั้ง devkit และเพิ่มลงใน PATH
ของระบบแล้ว
การติดตั้งด้วยตนเอง
หากคุณใช้ Windows 7+ เป็นสภาพแวดล้อมการพัฒนา คุณอาจต้องติดตั้งแอปพลิเคชัน file.exe
ด้วยตนเอง ระบบ file spoofing
ใน Paperclip 4+ อาศัยสิ่งนี้ หากคุณไม่ได้ใช้งาน คุณจะได้รับ Validation failed: Upload file has an extension that does not match its contents.
ข้อผิดพลาด
หากต้องการติดตั้งด้วยตนเอง คุณควรดำเนินการดังต่อไปนี้:
ดาวน์โหลดและติดตั้ง
file
จาก URL นี้
เพื่อทดสอบ คุณสามารถใช้รูปภาพด้านล่าง:
ถัดไป คุณต้องผสานรวมกับสภาพแวดล้อมของคุณ - โดยเฉพาะอย่างยิ่งผ่านทางตัวแปร PATH
หรือโดยการเปลี่ยนไฟล์ config/environments/development.rb
เส้นทาง
1. Click "Start" 2. On "Computer", right-click and select "Properties" 3. In Properties, select "Advanced System Settings" 4. Click the "Environment Variables" button 5. Locate the "PATH" var - at the end, add the path to your newly installed `file.exe` (typically `C:Program Files (x86)GnuWin32bin`) 6. Restart any CMD shells you have open & see if it works
หรือ
สิ่งแวดล้อม
1. Open `config/environments/development.rb` 2. Add the following line: `Paperclip.options[:command_path] = 'C:Program Files (x86)GnuWin32bin'` 3. Restart your Rails server
วิธีใดวิธีหนึ่งเหล่านี้จะทำให้การตั้งค่า Rails ของคุณสามารถเข้าถึงฟังก์ชันการทำงาน file.exe
ได้ ซึ่งจะทำให้สามารถตรวจสอบเนื้อหาของไฟล์ได้ (แก้ไขปัญหาการปลอมแปลง)
คลิปหนีบกระดาษได้รับการแจกจ่ายเสมือนอัญมณี ซึ่งเป็นวิธีที่ควรใช้ในแอปของคุณ
รวมอัญมณีไว้ใน Gemfile ของคุณ:
อัญมณี "คลิปหนีบกระดาษ", "~> 6.0.0"
หรือหากคุณต้องการรับข้อมูลล่าสุด คุณสามารถรับข้อมูลหลักได้จากที่เก็บคลิปหนีบกระดาษหลัก:
อัญมณี "คลิปหนีบกระดาษ", git: "git://github.com/ thoughtbot/paperclip.git"
หากคุณกำลังพยายามใช้คุณสมบัติที่ดูเหมือนจะไม่ได้อยู่ใน gem ที่ออกล่าสุด แต่มีการกล่าวถึงใน README นี้ คุณอาจต้องระบุสาขาหลักหากต้องการใช้ README นี้น่าจะล้ำหน้าเวอร์ชันล่าสุดหากคุณอ่านบน GitHub
สำหรับการใช้งานที่ไม่ใช่ Rails:
คลาส ModuleName < ActiveRecord::Base รวมถึงคลิปหนีบกระดาษ::Glue ...จบ
ผู้ใช้คลาส < ActiveRecord::Base has_attached_file :avatar, รูปแบบ: { สื่อ: "300x300>", นิ้วหัวแม่มือ: "100x100>" }, default_url: "/images/:style/missing.png" validates_attachment_content_type :avatar, content_type: / Aimage/.*z/end
สมมติว่าคุณมีตาราง users
ให้เพิ่มคอลัมน์ avatar
ลงในตาราง users
:
คลาส AddAvatarColumnsToUsers < ActiveRecord::Migration def up add_attachment :users, :avatar end def down remove_attachment :users, :avatar endend
(หรือคุณสามารถใช้ตัวสร้างการโยกย้าย Rails: rails generate paperclip user avatar
)
ตรวจสอบให้แน่ใจว่าคุณมีวิธีที่เกี่ยวข้องในคอนโทรลเลอร์ของคุณ:
<%= form_for @user, url: users_path, html: { หลายส่วน: true } ทำ | แบบฟอร์ม | %> <%= form.file_field :avatar %> <%= form.submit %><% สิ้นสุด %>
<%= simple_form_for @user, url: users_path ทำ | แบบฟอร์ม | %> <%= form.input :avatar เป็น: :file %> <%= form.submit %><% end %>
def create @user = User.create(user_params)endprivate# ใช้ strong_parameters สำหรับแอตทริบิวต์ whitelisting# อย่าลืมอัปเดตการสร้าง () และอัปเดต () วิธีการควบคุมของคุณ def user_params params.require(:user).permit(:avatar)end
เพิ่มสิ่งเหล่านี้ลงในมุมมองที่คุณต้องการให้รูปภาพของคุณแสดง:
<%= image_tag @user.avatar.url %><%= image_tag @user.avatar.url(:medium) %><%= image_tag @user.avatar.url(:thumb) %>
มีสองวิธีในการตรวจสอบว่ามีไฟล์อยู่หรือไม่:
file?
และ present?
ตรวจสอบว่ามีการเติมฟิลด์ _file_name
หรือไม่
exists?
ตรวจสอบว่ามีไฟล์อยู่หรือไม่ (จะทำการเชื่อมต่อ TCP หากเก็บไว้ในคลาวด์)
โปรดจำสิ่งนี้ไว้หากคุณกำลังตรวจสอบว่ามีไฟล์อยู่ในลูปหรือไม่ เวอร์ชันแรกมีประสิทธิภาพมากกว่าอย่างเห็นได้ชัด แต่มีความหมายต่างกัน
ตั้งค่าแอตทริบิวต์เป็น nil
และบันทึก
@user.avatar = ไม่มี@user.save
พื้นฐานของคลิปหนีบกระดาษนั้นค่อนข้างง่าย: ประกาศว่าโมเดลของคุณมีสิ่งที่แนบมาด้วยเมธอด has_attached_file
และตั้งชื่อให้
คลิปหนีบกระดาษจะรวมแอตทริบิวต์สูงสุดสี่รายการ (ทั้งหมดนำหน้าด้วยชื่อไฟล์แนบนั้น ดังนั้นคุณจึงสามารถมีไฟล์แนบหลายไฟล์ต่อโมเดลได้หากต้องการ) และกำหนดส่วนหน้าที่เป็นมิตร คุณลักษณะเหล่านี้คือ:
ตามค่าเริ่มต้น ต้องใช้เพียง
เท่านั้นเพื่อให้คลิปหนีบกระดาษทำงานได้ คุณจะต้องเพิ่ม
ในกรณีที่คุณต้องการใช้การตรวจสอบประเภทเนื้อหา
ข้อมูลเพิ่มเติมเกี่ยวกับตัวเลือกที่ส่งไปยัง has_attached_file
มีอยู่ในเอกสารประกอบของ Paperclip::ClassMethods
สำหรับการตรวจสอบ Paperclip จะแนะนำเครื่องมือตรวจสอบหลายตัวเพื่อตรวจสอบไฟล์แนบของคุณ:
AttachmentContentTypeValidator
AttachmentPresenceValidator
AttachmentSizeValidator
ตัวอย่างการใช้งาน:
ตรวจสอบ :avatar, attachment_presence: truevalidates_with AttachmentPresenceValidator, แอ็ตทริบิวต์: :avatarvalidates_with AttachmentSizeValidator, แอ็ตทริบิวต์: :avatar, less_than: 1.megabytes
เครื่องมือตรวจสอบความถูกต้องสามารถกำหนดได้โดยใช้รูปแบบตัวช่วยแบบเก่า:
validates_attachment_presence
validates_attachment_content_type
validates_attachment_size
ตัวอย่างการใช้งาน:
validates_attachment_presence :avatar
สุดท้ายนี้ คุณยังสามารถกำหนดการตรวจสอบหลายรายการในไฟล์แนบเดียวได้โดยใช้ validates_attachment
:
validates_attachment :avatar การมีอยู่: จริง content_type: "image/jpeg" ขนาด: { ใน: 0..10.kilobytes }
หมายเหตุ: การประมวลผลภายหลังจะไม่ เริ่ม ด้วยซ้ำหากไฟล์แนบไม่ถูกต้องตามการตรวจสอบ การโทรกลับและตัวประมวลผลของคุณจะถูกเรียกพร้อมกับไฟล์แนบที่ถูกต้อง เท่านั้น
ข้อความคลาส < ActiveRecord::Base has_attached_file :asset, styles: { thumb: "100x100#" } before_post_process :skip_for_audio def skip_for_audio - %w(แอปพลิเคชันเสียง/ogg/ogg).include?(asset_content_type) สิ้นสุด
หากคุณมีการตรวจสอบอื่น ๆ ที่ขึ้นอยู่กับลำดับการมอบหมาย แนวทางปฏิบัติที่แนะนำคือป้องกันการมอบหมายสิ่งที่แนบมาในภายหลัง จากนั้นจึงมอบหมายด้วยตนเอง:
class Book < ActiveRecord::Base has_attached_file :document, styles: { รูปขนาดย่อ: "60x60#" } validates_attachment :document, content_type: "application/pdf" validates_something_else # การตรวจสอบอื่น ๆ ที่ขัดแย้งกับ Paperclip'sendclass BooksController < ApplicationController def create @book = Book.new(book_params) @book.document = params[:book][:document] @book.save response_with @book end def ส่วนตัว book_params params.require(:book).permit(:title, :author) สิ้นสุด
หมายเหตุเกี่ยวกับการตรวจสอบความถูกต้องและความปลอดภัย content_type
คุณควรตรวจสอบให้แน่ใจว่าคุณตรวจสอบไฟล์ว่าเป็นประเภท MIME ที่คุณต้องการสนับสนุนอย่างชัดเจนเท่านั้น หากคุณไม่ทำเช่นนั้น คุณอาจถูกโจมตี XSS ได้หากผู้ใช้อัปโหลดไฟล์ที่มีเพย์โหลด HTML ที่เป็นอันตราย
หากคุณสนใจเฉพาะรูปภาพ ให้จำกัด content_types ที่อนุญาตของคุณไว้ที่ image-y:
validates_attachment :avatar, content_type: ["image/jpeg", "image/gif", "image/png"]
Paperclip::ContentTypeDetector
จะพยายามจับคู่ส่วนขยายของไฟล์กับ content_type ที่อนุมาน โดยไม่คำนึงถึงเนื้อหาจริงของไฟล์
หากต้องการใช้หรือเพิ่มไฟล์ภาษาในภาษาต่างๆ ให้ตรวจสอบโครงการ https://github.com/thintbot/paperclip-i18n
ขอขอบคุณรายงานจาก Egor Homakov เราได้ดำเนินการเพื่อป้องกันไม่ให้บุคคลอื่นปลอมแปลงประเภทเนื้อหาและรับข้อมูลที่คุณไม่คาดคิดไปยังเซิร์ฟเวอร์ของคุณ
หมายเหตุ: ตั้งแต่เวอร์ชัน 4.0.0 เป็นต้นไป เอกสารแนบทั้งหมด จำเป็นต้อง มีการตรวจสอบ content_type, การตรวจสอบชื่อไฟล์ หรือระบุอย่างชัดเจนว่าจะไม่มีอย่างใดอย่างหนึ่ง คลิปหนีบกระดาษจะทำให้เกิดข้อผิดพลาด หากคุณไม่ทำเช่นนี้
class ActiveRecord::Base has_attached_file :avatar # ตรวจสอบประเภทเนื้อหา validates_attachment_content_type :avatar, content_type: /Aimage/ # ตรวจสอบชื่อไฟล์ validates_attachment_file_name :avatar, ตรงกัน: [/pngz/, /jpe?gz/] # ไม่แสดงอย่างชัดเจน ตรวจสอบ do_not_validate_attachment_file_type :avatarend
ซึ่งจะทำให้คลิปหนีบกระดาษมีความปลอดภัยตามค่าเริ่มต้น และจะป้องกันไม่ให้ผู้อื่นพยายามยุ่งเกี่ยวกับระบบไฟล์ของคุณ
หมายเหตุ: ตั้งแต่เวอร์ชัน 4.0.0 เป็นต้นไป คลิปหนีบกระดาษมีการตรวจสอบอื่นที่ไม่สามารถปิดได้ การตรวจสอบนี้จะป้องกันการปลอมแปลงประเภทเนื้อหา นั่นคือการอัปโหลดเอกสาร PHP (ตัวอย่าง) โดยเป็นส่วนหนึ่งของแท็ก EXIF ของ JPEG ที่มีรูปแบบถูกต้อง การตรวจสอบนี้จำกัดอยู่ที่ประเภทสื่อ (ส่วนแรกของประเภท MIME ดังนั้น 'ข้อความ' ใน text/plain
) วิธีนี้จะป้องกันไม่ให้เอกสาร HTML ถูกอัพโหลดเป็น JPEG แต่จะไม่ป้องกัน GIF จากการอัพโหลดด้วยนามสกุล .jpg
การตรวจสอบนี้จะเพิ่มข้อผิดพลาดในการตรวจสอบลงในแบบฟอร์มเท่านั้น ก็จะไม่ทำให้เกิดข้อผิดพลาดขึ้น
ซึ่งบางครั้งอาจทำให้เกิดข้อผิดพลาดในการตรวจสอบความถูกต้องที่ผิดพลาดในแอปพลิเคชันที่ใช้นามสกุลไฟล์แบบกำหนดเอง ในกรณีเหล่านี้ คุณอาจต้องการเพิ่มส่วนขยายที่กำหนดเองของคุณลงในรายการการแมปประเภทเนื้อหาโดยสร้าง config/initializers/paperclip.rb
:
# อนุญาตให้ ".foo" เป็นส่วนขยายสำหรับไฟล์ที่มีประเภท MIME "text/plain".Paperclip.options[:content_type_mappings] = { foo: %w(text/plain)}
ค่าเริ่มต้นสากลสำหรับไฟล์แนบคลิปหนีบกระดาษทั้งหมดของคุณสามารถกำหนดได้โดยการเปลี่ยนคลิปหนีบกระดาษ::Attachment.default_options Hash สิ่งนี้มีประโยชน์สำหรับการตั้งค่าพื้นที่เก็บข้อมูลเริ่มต้นของคุณตามตัวอย่าง ดังนั้นคุณไม่จำเป็นต้องกำหนดการตั้งค่าเหล่านี้ในทุกคำจำกัดความ has_attached_file
หากคุณใช้ Rails คุณสามารถกำหนดแฮชด้วยตัวเลือกเริ่มต้นใน config/application.rb
หรือในไฟล์ config/environments/*.rb
ใดๆ บน config.paperclip_defaults สิ่งเหล่านี้จะถูกรวมเข้ากับ Paperclip::Attachment.default_options
เมื่อแอป Rails ของคุณบูท ตัวอย่าง:
โมดูลแอปพลิเคชันคลาส YourApp < Rails::Application # รหัสอื่น ๆ... config.paperclip_defaults = { ที่เก็บข้อมูล: :fog, fog_credentials: { ผู้ให้บริการ: "Local", local_root: "#{Rails.root}/public"}, fog_directory: "", fog_host: "localhost"} สิ้นสุด
อีกทางเลือกหนึ่งคือแก้ไขคลิป Paperclip::Attachment.default_options
Hash โดยตรง - วิธีนี้ใช้ได้กับแอปพลิเคชันที่ไม่ใช่ Rails หรือเป็นตัวเลือกหากคุณต้องการวางการตั้งค่าเริ่มต้นของคลิปหนีบกระดาษในเครื่องมือเริ่มต้น
ตัวอย่าง Rails Initializer จะมีลักษณะดังนี้:
คลิปหนีบกระดาษ::Attachment.default_options[:storage] = :fogPaperclip::Attachment.default_options[:fog_credentials] = { ผู้ให้บริการ: "Local", local_root: "#{Rails.root}/public"}คลิปหนีบกระดาษ::Attachment.default_options[ :fog_directory] = ""คลิปหนีบกระดาษ::Attachment.default_options[:fog_host] = "http://localhost:3000"
คลิปหนีบกระดาษกำหนดวิธีการโยกย้ายหลายวิธีซึ่งสามารถใช้เพื่อสร้างคอลัมน์ที่จำเป็นในแบบจำลองของคุณ มีวิธีช่วยเหลือสองประเภทที่จะช่วยในเรื่องนี้ ดังนี้:
ตัวช่วย attachment
สามารถนำมาใช้เมื่อสร้างตาราง:
คลาส CreateUsersWithAttachments < ActiveRecord::Migration def up create_table :users do |t| t.attachment :avatar end end # สมมติว่าคุณใช้ตารางผู้ใช้สำหรับไฟล์แนบคลิปหนีบกระดาษเท่านั้น วางอย่างระมัดระวัง! def down drop_table : ผู้ใช้สิ้นสุด
คุณยังสามารถใช้วิธี change
แทนการรวมกัน up
/ down
ด้านบน ดังที่แสดงด้านล่าง:
คลาส CreateUsersWithAttachments < ActiveRecord::Migration def การเปลี่ยนแปลง create_table :users do |t| t.attachment :avatar สิ้นสุด สิ้นสุด
อีกวิธีหนึ่ง สามารถใช้เมธอด add_attachment
และ remove_attachment
เพื่อเพิ่มคอลัมน์คลิปหนีบกระดาษใหม่ลงในตารางที่มีอยู่:
คลาส AddAttachmentColumnsToUsers < ActiveRecord::Migration def up add_attachment :users, :avatar end def down remove_attachment :users, :avatar endend
หรือคุณสามารถทำสิ่งนี้ด้วยวิธี change
:
คลาส AddAttachmentColumnsToUsers < ActiveRecord::Migration def การเปลี่ยนแปลง add_attachment :users, :avatar สิ้นสุด
ไวยากรณ์แบบโบราณ (เช่น t.has_attached_file
และ drop_attached_file
) ยังคงได้รับการสนับสนุนใน Paperclip 3.x แต่ขอแนะนำให้คุณอัปเดตไฟล์การย้ายข้อมูลเหล่านั้นเพื่อใช้ไวยากรณ์ใหม่นี้
คลิปหนีบกระดาษมาพร้อมกับอะแดปเตอร์จัดเก็บข้อมูล 3 ชิ้น:
พื้นที่จัดเก็บไฟล์
พื้นที่เก็บข้อมูล S3 (ผ่าน aws-sdk-s3
)
ที่เก็บหมอก
หากคุณต้องการใช้คลิปหนีบกระดาษกับที่เก็บข้อมูลอื่น คุณสามารถติดตั้งอัญมณีเหล่านี้ควบคู่ไปกับคลิปหนีบกระดาษ:
คลิปหนีบกระดาษ-สีฟ้า
คลิปหนีบกระดาษสีฟ้าจัดเก็บ
คลิปหนีบกระดาษ-ดรอปบ็อกซ์
ไฟล์ที่กำหนดเป็นสิ่งที่แนบมา ตามค่าเริ่มต้น จะอยู่ในไดเร็กทอรีที่ระบุโดยตัวเลือก :path
ไปยัง has_attached_file
ตามค่าเริ่มต้น ตำแหน่งนี้คือ :rails_root/public/system/:class/:attachment/:id_partition/:style/:filename
ตำแหน่งนี้ถูกเลือกเนื่องจากในการปรับใช้ Capistrano แบบมาตรฐาน ไดเร็กทอรี public/system
สามารถเชื่อมโยงกับไดเร็กทอรีที่แชร์ของแอปได้ ซึ่งหมายความว่าจะคงอยู่ในระหว่างการปรับใช้ ตัวอย่างเช่น หากใช้สิ่งนั้น :path
คุณอาจมีไฟล์อยู่ที่
/data/myapp/releases/20081229172410/public/system/users/avatar/000/000/013/small/my_pic.png
หมายเหตุ : นี่เป็นการเปลี่ยนแปลงจากคลิปหนีบกระดาษเวอร์ชันก่อนหน้า แต่โดยรวมแล้วเป็นตัวเลือกที่ปลอดภัยกว่าสำหรับที่เก็บไฟล์เริ่มต้น
คุณยังอาจเลือกที่จะจัดเก็บไฟล์ของคุณโดยใช้บริการ S3 ของ Amazon ได้อีกด้วย ในการทำเช่นนั้น ให้รวม aws-sdk-s3
gem ไว้ใน Gemfile ของคุณ:
อัญมณี 'aws-sdk-s3'
จากนั้นคุณสามารถระบุการใช้ S3 จาก has_attached_file
คุณสามารถค้นหาข้อมูลเพิ่มเติมเกี่ยวกับการกำหนดค่าและการใช้พื้นที่จัดเก็บข้อมูล S3 ได้ในเอกสารประกอบ Paperclip::Storage::S3
ไฟล์บนระบบไฟล์ในเครื่อง (และในไดเร็กทอรีสาธารณะของแอป Rails) จะพร้อมใช้งานบนอินเทอร์เน็ตโดยรวม หากคุณต้องการการควบคุมการเข้าถึง คุณสามารถวางไฟล์ของคุณในตำแหน่งอื่นได้ คุณจะต้องเปลี่ยนทั้งตัวเลือก :path
และ :url
เพื่อให้แน่ใจว่าไฟล์จะไม่พร้อมใช้งานแบบสาธารณะ ทั้ง :path
และ :url
อนุญาตให้ใช้ชุดตัวแปรที่ประมาณค่าชุดเดียวกัน
เมื่ออัปโหลดหรือแนบไฟล์ ไฟล์นั้นอาจอยู่ในรูปแบบอินพุตที่แตกต่างกันไม่กี่แบบ ตั้งแต่ออบเจ็กต์ UploadedFile ของ Rails ไปจนถึง StringIO ไปจนถึง Tempfile หรือแม้แต่สตริงธรรมดาที่เป็น URL ที่ชี้ไปยังรูปภาพ
คลิปหนีบกระดาษจะยอมรับแหล่งที่มาเหล่านี้หลายแหล่งตามค่าเริ่มต้น นอกจากนี้ยังสามารถจัดการได้มากขึ้นด้วยการกำหนดค่าเพียงเล็กน้อย อะแดปเตอร์ IO ที่จัดการรูปภาพจากแหล่งที่ไม่ใช่ภายในเครื่องไม่ได้เปิดใช้งานตามค่าเริ่มต้น สามารถเปิดใช้งานได้โดยเพิ่มบรรทัดที่คล้ายกับข้อความต่อไปนี้ลงใน config/initializers/paperclip.rb
:
คลิปหนีบกระดาษ::DataUriAdapter.register
วิธีที่ดีที่สุดคือเปิดใช้งานอะแดปเตอร์การโหลดระยะไกลเฉพาะในกรณีที่จำเป็นเท่านั้น มิฉะนั้น อาจมีโอกาสที่ใครบางคนจะได้รับข้อมูลเชิงลึกเกี่ยวกับโครงสร้างเครือข่ายภายในของคุณโดยใช้โครงสร้างดังกล่าวเป็นเวกเตอร์
อะแดปเตอร์ต่อไปนี้ ไม่ได้ โหลดตามค่าเริ่มต้น:
Paperclip::UriAdapter
- ซึ่งยอมรับอินสแตนซ์ URI
Paperclip::HttpUrlProxyAdapter
- ซึ่งยอมรับสตริง http
Paperclip::DataUriAdapter
- ซึ่งยอมรับ data:
string
คลิปหนีบกระดาษรองรับการเลือกโพสต์โปรเซสเซอร์ที่ขยายได้ เมื่อคุณกำหนดชุดรูปแบบสำหรับไฟล์แนบ ตามค่าเริ่มต้น คาดว่า "สไตล์" เหล่านั้นจะเป็น "รูปขนาดย่อ" จริงๆ สิ่งเหล่านี้ได้รับการประมวลผลโดย Paperclip::Thumbnail
สำหรับเหตุผลด้านความเข้ากันได้แบบย้อนหลัง คุณสามารถส่งผ่านสตริงเรขาคณิตเส้นเดียว หรืออาร์เรย์ที่มีรูปทรงเรขาคณิตและรูปแบบที่จะแปลงไฟล์ได้ เช่น:
has_attached_file :avatar, รูปแบบ: { นิ้วหัวแม่มือ: ["32x32#", :png] }
การดำเนินการนี้จะแปลงรูปแบบ "thumb" เป็นสี่เหลี่ยมจัตุรัสขนาด 32x32 ในรูปแบบ PNG ไม่ว่าจะอัปโหลดอะไรก็ตาม หากไม่ได้ระบุรูปแบบ รูปแบบนั้นจะคงเหมือนเดิม (เช่น JPG จะยังคงเป็น JPG) Paperclip::Thumbnail
ใช้ ImageMagick เพื่อประมวลผลภาพ เอกสารเรขาคณิตของ ImageMagick มีข้อมูลเพิ่มเติมเกี่ยวกับรูปแบบสไตล์ที่ยอมรับ
สำหรับการควบคุมกระบวนการแปลงที่ละเอียดยิ่งขึ้น สามารถใช้ source_file_options
และ convert_options
เพื่อส่งแฟล็กและการตั้งค่าโดยตรงไปยังเครื่องมือแปลงอันทรงพลังของ ImageMagick ตามเอกสารที่นี่ ตัวอย่างเช่น:
has_attached_file :image, styles: { ปกติ: ['800x800>', :png]}, source_file_options: { ปกติ: "-ความหนาแน่น 96 -ความลึก 8 -คุณภาพ 85" }, Convert_options: { ปกติ: "-posterize 3"}
ImageMagick รองรับตัวแปรสภาพแวดล้อมจำนวนหนึ่งสำหรับการควบคุมขีดจำกัดทรัพยากร ตัวอย่างเช่น คุณสามารถบังคับใช้หน่วยความจำหรือขีดจำกัดเวลาดำเนินการโดยการตั้งค่าตัวแปรต่อไปนี้ในสภาพแวดล้อมกระบวนการของแอปพลิเคชันของคุณ:
MAGICK_MEMORY_LIMIT=128MiB
MAGICK_MAP_LIMIT=64MiB
MAGICK_TIME_LIMIT=30
สำหรับรายการตัวแปรและคำอธิบายทั้งหมด โปรดดูเอกสารประกอบทรัพยากรของ ImageMagick
คุณสามารถเขียนตัวประมวลผลไฟล์แนบที่คุณกำหนดเองเพื่อทำงานต่างๆ เช่น เพิ่มลายน้ำ บีบอัดรูปภาพ หรือเข้ารหัสไฟล์ ตัวประมวลผลแบบกำหนดเองจะต้องถูกกำหนดไว้ภายในโมดูล Paperclip
สืบทอดมาจาก Paperclip::Processor
(ดู lib/paperclip/processor.rb
) และใช้เมธอด make
ที่ส่งคืน File
ไฟล์ทั้งหมดในไดเร็กทอรี lib/paperclip
และ lib/paperclip_processors
ของแอป Rails จะถูกโหลดโดย Paperclip โดยอัตโนมัติ โปรเซสเซอร์ถูกระบุโดยใช้ตัวเลือก :processors
ถึง has_attached_file
:
has_attached_file :scan, สไตล์: { ข้อความ: { คุณภาพ: :better } }, โปรเซสเซอร์: [:ocr]
สิ่งนี้จะโหลดคลาสสมมุติ Paperclip::Ocr
และส่งผ่านตัวเลือก hash { quality: :better }
พร้อมกับไฟล์ที่อัปโหลด
สามารถระบุโปรเซสเซอร์ได้หลายตัว และจะถูกเรียกใช้ตามลำดับที่กำหนดไว้ในอาร์เรย์ :processors
โปรเซสเซอร์ที่ต่อเนื่องกันแต่ละตัวจะได้รับผลลัพธ์จากโปรเซสเซอร์รุ่นก่อนหน้า โปรเซสเซอร์ทั้งหมดได้รับพารามิเตอร์เดียวกัน ซึ่งกำหนดไว้ใน :styles
hash ตัวอย่างเช่น สมมติว่าเรามีคำจำกัดความนี้:
has_attached_file :scan, สไตล์: { ข้อความ: { คุณภาพ: :ดีกว่า } }, โปรเซสเซอร์: [:rotator, :ocr]
ทั้งตัวประมวลผล :rotator
และตัวประมวลผล :ocr
จะได้รับตัวเลือก { quality: :better }
หากโปรเซสเซอร์ได้รับตัวเลือกที่ไม่รู้จัก ก็คาดว่าจะเพิกเฉยต่อตัวเลือกนั้น
หมายเหตุ: เนื่องจากโปรเซสเซอร์ทำงานโดยการเปลี่ยนสิ่งที่แนบดั้งเดิมเป็นรูปแบบ จึงไม่มีการเรียกใช้โปรเซสเซอร์หากไม่มีการกำหนดสไตล์ไว้
หากคุณสนใจที่จะแคชความกว้าง ความสูง และขนาดของภาพขนาดย่อในฐานข้อมูล ลองดูที่คลิปหนีบกระดาษ-meta gem
นอกจากนี้ หากคุณสนใจที่จะสร้างภาพขนาดย่อได้ทันที คุณอาจต้องการดูอัญมณี attachment_on_the_fly
เครื่องมือสร้างภาพขนาดย่อของคลิปหนีบกระดาษ (ดู lib/paperclip/thumbnail.rb
) ถูกนำมาใช้เป็นตัวประมวลผล และอาจเป็นข้อมูลอ้างอิงที่ดีสำหรับการเขียนตัวประมวลผลของคุณเอง
ก่อนและหลังขั้นตอนหลังการประมวลผล คลิปหนีบกระดาษจะเรียกกลับไปยังโมเดลโดยมีการเรียกกลับเล็กน้อย ทำให้โมเดลสามารถเปลี่ยนแปลงหรือยกเลิกขั้นตอนการประมวลผลได้ การเรียกกลับคือ before_post_process
และ after_post_process
(ซึ่งถูกเรียกก่อนและหลังการประมวลผลของแต่ละไฟล์แนบ) และไฟล์แนบเฉพาะ before_
และ after_
การเรียกกลับมีวัตถุประสงค์เพื่อให้ใกล้เคียงกับการเรียกกลับ ActiveRecord ปกติมากที่สุดเท่าที่จะเป็นไปได้ ดังนั้น หากคุณคืนค่าเท็จ (โดยเฉพาะ - การส่งคืนศูนย์ไม่เหมือนกัน) ใน before_filter
ขั้นตอนหลังการประมวลผลจะหยุดลง การส่งคืน false ใน after_filter
จะไม่หยุดสิ่งใด แต่คุณสามารถเข้าถึงโมเดลและไฟล์แนบได้หากจำเป็น
หมายเหตุ: การประมวลผลภายหลังจะไม่ เริ่ม ด้วยซ้ำหากไฟล์แนบไม่ถูกต้องตามการตรวจสอบ การโทรกลับและตัวประมวลผลของคุณจะถูกเรียกพร้อมกับไฟล์แนบที่ถูกต้อง เท่านั้น
ข้อความคลาส < ActiveRecord::Base has_attached_file :asset, styles: { thumb: "100x100#" } before_post_process :skip_for_audio def skip_for_audio - %w(แอปพลิเคชันเสียง/ogg/ogg).include?(asset_content_type) สิ้นสุด
คลิปหนีบกระดาษมีการแก้ไขที่เรียกว่า :hash
เพื่อทำให้ชื่อไฟล์ของไฟล์ที่เปิดเผยต่อสาธารณะสับสน
ตัวอย่างการใช้งาน:
has_attached_file :avatar, { url: "/system/:hash.:extension", hash_secret: "longSecretString"}
การประมาณค่า :hash
จะถูกแทนที่ด้วยแฮชเฉพาะที่ประกอบด้วยสิ่งใดก็ตามที่ระบุไว้ใน :hash_data
ค่าเริ่มต้นสำหรับ :hash_data
คือ ":class/:attachment/:id/:style/:updated_at"
:hash_secret
เป็นสิ่งจำเป็น - ข้อยกเว้นจะเกิดขึ้นหาก :hash
ถูกใช้โดยไม่มี :hash_secret
ปรากฏ
หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับคุณลักษณะนี้ โปรดอ่านคำอธิบายของผู้เขียนเอง
การตรวจสอบไฟล์ต้นฉบับที่กำหนดจะถูกวางไว้ในโมเดลหากมีแอตทริบิวต์ชื่อลายนิ้วมือ ตามตัวอย่างการย้ายโมเดลผู้ใช้ด้านบน การย้ายจะมีลักษณะดังนี้:
คลาส AddAvatarFingerprintColumnToUser < ActiveRecord::Migration def ขึ้น add_column :users, :avatar_fingerprint, :string end def down remove_column :users, :avatar_fingerprint สิ้นสุด
สามารถระบุอัลกอริทึมได้โดยใช้ตัวเลือกการกำหนดค่า โดยค่าเริ่มต้นจะเป็น MD5 สำหรับความเข้ากันได้แบบย้อนหลังกับคลิปหนีบกระดาษ 5 และรุ่นก่อนหน้า
has_attached_file :some_attachment, adapter_options: { hash_digest: สรุป::SHA256 }
รัน CLASS=User ATTACHMENT=avatar rake paperclip:refresh:fingerprints
หลังจากเปลี่ยนไดเจสต์ในไฟล์แนบที่มีอยู่เพื่ออัพเดตลายนิ้วมือในฐานข้อมูล
มีตัวเลือกในการเก็บรักษาไฟล์แนบเพื่อให้สามารถเล่นได้ดีกับโมเดลที่ถูกลบแบบนุ่มนวล (acts_as_paranoid, หวาดระแวง ฯลฯ)
has_attached_file :some_attachment, {เก็บรักษา_ไฟล์: จริง}
วิธีนี้จะป้องกันไม่ให้ some_attachment
ถูกล้างออกเมื่อโมเดลถูกทำลาย ดังนั้นจึงจะยังคงมีอยู่เมื่อออบเจ็กต์ได้รับการกู้คืนในภายหลัง
ออบเจ็กต์ที่เรียกได้ (lambdas, Procs) สามารถใช้ได้ในหลายตำแหน่งสำหรับการกำหนดค่าแบบไดนามิกตลอดทั้งคลิปหนีบกระดาษ กลยุทธ์นี้มีอยู่ในองค์ประกอบจำนวนหนึ่งของไลบรารี แต่มีความสำคัญที่สุดในความเป็นไปได้ในการอนุญาตให้ใช้สไตล์และตัวประมวลผลแบบกำหนดเองสำหรับอินสแตนซ์รุ่นเฉพาะ แทนที่จะใช้สไตล์และตัวประมวลผลที่กำหนดไว้กับทุกอินสแตนซ์
ลองนึกภาพโมเดลผู้ใช้ที่มีสไตล์ที่แตกต่างกันตามบทบาทของผู้ใช้ บางทีผู้ใช้บางคนอาจเป็นหัวหน้า (เช่นอินสแตนซ์โมเดลผู้ใช้ตอบสนองต่อ #boss?
) และสมควรได้รับภาพขนาดย่อของอวตารที่ใหญ่กว่าผู้ใช้ทั่วไป การกำหนดค่าเพื่อกำหนดพารามิเตอร์สไตล์ที่จะใช้ตามบทบาทของผู้ใช้อาจมีลักษณะดังนี้ โดยที่หัวหน้าจะได้รับภาพขนาดย่อ 300x300
มิฉะนั้นจะสร้างภาพขนาดย่อ 100x100
ผู้ใช้คลาส < ActiveRecord::Base has_attached_file :avatar, สไตล์: lambda { |ไฟล์แนบ| { นิ้วหัวแม่มือ: (attachment.instance.boss? ? "300x300>" : "100x100>") } } จบ
อีกตัวอย่างที่วางแผนไว้คือโมเดลผู้ใช้ที่ทราบว่าควรใช้ตัวประมวลผลไฟล์ใด (นอกเหนือจากตัวประมวลผล thumbnail
ย่อโดยนัยที่เรียกใช้เมื่อ :styles
ถูกกำหนดไว้) บางทีเราอาจมีโปรเซสเซอร์ลายน้ำให้ใช้และใช้กับอวตารของบางรุ่นเท่านั้น การกำหนดค่าสำหรับสิ่งนี้อาจเป็นตำแหน่งที่มีการสอบถามอินสแตนซ์ว่าควรใช้โปรเซสเซอร์ตัวใด สันนิษฐานว่าผู้ใช้บางรายอาจส่งคืน [:thumbnail, :watermark]
สำหรับโปรเซสเซอร์ โดยที่ตัวประมวล watermark
ที่กำหนดจะถูกเรียกใช้หลังจากตัวประมวลผลภาพ thumbnail
ที่กำหนดโดยคลิปหนีบกระดาษแล้ว
ผู้ใช้คลาส < ActiveRecord::Base has_attached_file :avatar, โปรเซสเซอร์: lambda { |อินสแตนซ์| instance.processors } attr_accessor :processorsend
ตามค่าเริ่มต้น คลิปหนีบกระดาษจะส่งออกการบันทึกตามระดับตัวบันทึกของคุณ หากคุณต้องการปิดใช้งานการบันทึก (เช่น ระหว่างการทดสอบ) ให้เพิ่มสิ่งนี้ลงในการกำหนดค่าสภาพแวดล้อมของคุณ:
Your::Application.configure do... Paperclip.options[:log] = false...end
ข้อมูลเพิ่มเติมใน rdocs
หากต้องการให้ Capistrano เชื่อมโยงไดเร็กทอรี public/system
เพื่อให้ไฟล์แนบรอดจากการปรับใช้ใหม่ ให้ตั้งค่าตัวเลือก linked_dirs
ในไฟล์ config/deploy.rb
ของคุณ:
ชุด :linked_dirs, fetch(:linked_dirs, []).push('public/system')
คลิปหนีบกระดาษทราบถึงรูปแบบไฟล์แนบใหม่ที่คุณได้เพิ่มในการปรับใช้ครั้งก่อน สิ่งเดียวที่คุณควรทำหลังจากการปรับใช้แต่ละครั้งคือการเรียก rake paperclip:refresh:missing_styles
มันจะจัดเก็บรูปแบบไฟล์แนบปัจจุบันใน RAILS_ROOT/public/system/paperclip_attachments.yml
ตามค่าเริ่มต้น คุณสามารถเปลี่ยนได้โดย:
Paperclip.registered_attachments_styles_path = '/tmp/config/paperclip_attachments.yml'
นี่คือตัวอย่างสำหรับ Capistrano:
เนมสเปซ : คลิปหนีบกระดาษ do desc "สร้างสไตล์คลิปหนีบกระดาษที่ขาดหายไป" งาน :build_missing_styles ทำในบทบาท (:app) ทำภายใน release_path ทำกับ rails_env: fetch(:rails_env) ทำการดำเนินการ :rake, "paperclip:refresh:missing_styles" end end end endendafter( "deploy:compile_assets", "คลิปหนีบกระดาษ:build_missing_styles")
ตอนนี้คุณไม่จำเป็นต้องรีเฟรชภาพขนาดย่อในการผลิตทุกครั้งที่คุณเพิ่มสไตล์ใหม่ น่าเสียดายที่วิธีนี้ใช้ไม่ได้กับสไตล์ไดนามิก - เพียงแต่ไม่สนใจสไตล์เหล่านั้น
หากคุณมีแอปที่ใช้งานได้อยู่แล้วและไม่ต้องการให้ rake paperclip:refresh:missing_styles
รีเฟรชรูปภาพเก่า คุณต้องแจ้งคลิปหนีบกระดาษเกี่ยวกับสไตล์ที่มีอยู่ เพียงสร้างไฟล์ paperclip_attachments.yml
ด้วยมือ ตัวอย่างเช่น:
ผู้ใช้คลาส < ActiveRecord::Base has_attached_file :avatar, สไตล์: { นิ้วหัวแม่มือ: 'x100', ครอบตัดได้: '600x600>', ใหญ่: '1000x1000>' }endclass Book < ActiveRecord::Base has_attached_file:cover, สไตล์: { เล็ก: 'x100', ใหญ่: '1000x1000>' } has_attached_file :sample, styles: { หัวแม่มือ: 'x100' }end
จากนั้นใน RAILS_ROOT/public/system/paperclip_attachments.yml
:
---:ผู้ใช้: :อวตาร: - :นิ้วโป้ง - :ครอบตัดได้ - :ใหญ่:หนังสือ: :cover: - :เล็ก - :ใหญ่ :ตัวอย่าง: - :นิ้วหัวแม่มือ
คลิปหนีบกระดาษมีตัวจับคู่ที่เข้ากันได้กับ rspec สำหรับการทดสอบไฟล์แนบ ดูเอกสารประกอบเกี่ยวกับคลิปหนีบกระดาษ::Shoulda::Matchersสำหรับข้อมูลเพิ่มเติม
การทดสอบแบบขนาน
เนื่องจาก path
เริ่มต้นสำหรับที่เก็บข้อมูลคลิปหนีบกระดาษ หากคุณพยายามรันการทดสอบแบบขนาน คุณอาจพบว่าไฟล์ถูกเขียนทับเนื่องจากมีการคำนวณเส้นทางเดียวกันในแต่ละกระบวนการทดสอบ แม้ว่าการแก้ไขนี้จะใช้ได้กับ Parallel_tests แต่ควรใช้แนวคิดที่คล้ายกันสำหรับกลไกอื่นใดสำหรับการเรียกใช้การทดสอบพร้อมกัน
ถ้า ENV['PARALLEL_TEST_GROUPS'] คลิปหนีบกระดาษ::Attachment.default_options[:path] = ":rails_root/public/system/:rails_env/#{ENV['TEST_ENV_NUMBER'].to_i}/:class/:attachment/:id_partition/ :filename"else คลิปหนีบกระดาษ::Attachment.default_options[:path] = ":rails_root/public/system/:rails_env/:class/:attachment/:id_partition/:filename"end
ส่วนสำคัญที่นี่คือการรวม ENV['TEST_ENV_NUMBER']
หรือกลไกที่คล้ายกันสำหรับไลบรารีการทดสอบแบบขนานที่คุณใช้
การทดสอบบูรณาการ
การใช้การทดสอบบูรณาการกับ FactoryBot อาจบันทึกสำเนาไฟล์ทดสอบของคุณหลายชุดภายในแอป เพื่อหลีกเลี่ยงปัญหานี้ ให้ระบุเส้นทางที่กำหนดเองใน config/environments/test.rb
ดังนี้:
คลิปหนีบกระดาษ::Attachment.default_options[:path] = "#{Rails.root}/spec/test_files/:class/:id_partition/:style.:extension"
จากนั้น ตรวจสอบให้แน่ใจว่าได้ลบไดเร็กทอรีนั้นหลังจากที่ชุดทดสอบทำงานโดยเพิ่มสิ่งนี้ลงใน spec_helper.rb
config.after(:suite) ทำ FileUtils.rm_rf(Dir["#{Rails.root}/spec/test_files/"])end
ตัวอย่างการกำหนดค่าการทดสอบด้วย Factory Bot
FactoryBot.define ทำโรงงาน :user ทำ avatar { File.new("#{Rails.root}/spec/support/fixtures/image.jpg") } สิ้นสุด
หากคุณต้องการมีส่วนร่วมกับฟีเจอร์หรือแก้ไขข้อผิดพลาด: ขอบคุณ! เพื่อให้แน่ใจว่าการแก้ไข/ฟีเจอร์ของคุณมีโอกาสสูงที่จะถูกรวมไว้ โปรดอ่านคำแนะนำต่อไปนี้:
โพสต์คำขอดึง
ให้แน่ใจว่ามีการทดสอบ! เราจะไม่ยอมรับแพตช์ใดๆ ที่ไม่ได้ทดสอบ ไม่ค่อยมีความจำเป็นที่ต้องทดสอบอย่างชัดเจน หากคุณมีคำถามเกี่ยวกับการเขียนแบบทดสอบสำหรับคลิปหนีบกระดาษ โปรดเปิดปัญหา GitHub
โปรดดูที่ CONTRIBUTING.md
สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับการมีส่วนร่วมในการทดสอบ
ขอขอบคุณผู้มีส่วนร่วมทุกคน!
คลิปหนีบกระดาษเป็นลิขสิทธิ์ © 2008-2017 thoughtbot, inc. เป็นซอฟต์แวร์เสรีและอาจแจกจ่ายซ้ำได้ภายใต้เงื่อนไขที่ระบุไว้ในไฟล์ MIT-LICENSE
คลิปหนีบกระดาษได้รับการดูแลและได้รับทุนจาก thinkbot ชื่อและโลโก้ของ thinkbot เป็นเครื่องหมายการค้าของ thinkbot, inc.
เราชอบซอฟต์แวร์โอเพ่นซอร์ส! ดูโครงการอื่นๆ ของเราหรือจ้างเราเพื่อออกแบบ พัฒนา และขยายผลิตภัณฑ์ของคุณ