কম্পিউটার

রেল এবং মন্দিরের সাথে ফাইল আপলোড করা হচ্ছে

CarrierWave, Paperclip, এবং Dragonfly এর মতো অনেক ফাইল আপলোড করা রত্ন আছে, কয়েকটির নাম। তাদের সকলেরই তাদের সুনির্দিষ্ট বৈশিষ্ট্য রয়েছে এবং সম্ভবত আপনি ইতিমধ্যে এই রত্নগুলির মধ্যে অন্তত একটি ব্যবহার করেছেন৷

আজ, যাইহোক, আমি একটি তুলনামূলকভাবে নতুন, কিন্তু খুব সুন্দর সমাধান প্রবর্তন করতে চাই যার নাম শ্রীন, যা Janko Marohnić তৈরি করেছেন। কিছু অন্যান্য অনুরূপ রত্নগুলির বিপরীতে, এটির একটি মডুলার পদ্ধতি রয়েছে, যার অর্থ প্রতিটি বৈশিষ্ট্য একটি মডিউল (বা প্লাগইন) হিসাবে প্যাক করা হয় মন্দিরের পরিভাষায়)। বৈধতা সমর্থন করতে চান? একটি প্লাগইন যোগ করুন. কিছু ফাইল প্রসেসিং করতে চান? একটি প্লাগইন যোগ করুন! আমি সত্যিই এই পদ্ধতিটি পছন্দ করি কারণ এটি আপনাকে সহজেই নিয়ন্ত্রণ করতে দেয় কোন মডেলের জন্য কোন বৈশিষ্ট্যগুলি উপলব্ধ হবে।

এই নিবন্ধে আমি আপনাকে দেখাতে যাচ্ছি কিভাবে:

  • একটি রেল অ্যাপ্লিকেশনে মন্দিরকে একীভূত করুন
  • এটি কনফিগার করুন (বিশ্বব্যাপী এবং প্রতি আপলোডার)
  • ফাইল আপলোড করার ক্ষমতা যোগ করুন
  • প্রসেস ফাইল
  • বৈধকরণ নিয়ম যোগ করুন
  • অতিরিক্ত মেটাডেটা সঞ্চয় করুন এবং Amazon S3 এর সাথে ফাইল ক্লাউড স্টোরেজ নিয়োগ করুন

এই নিবন্ধটির উৎস কোডটি GitHub-এ উপলব্ধ।

কাজের ডেমো এখানে পাওয়া যাবে।

মন্দিরকে একীভূত করা

শুরু করতে, ডিফল্ট টেস্টিং স্যুট ছাড়াই একটি নতুন রেল অ্যাপ্লিকেশন তৈরি করুন:

রেলস নতুন FileGuru -T

আমি এই ডেমোর জন্য রেল 5 ব্যবহার করব, তবে বেশিরভাগ ধারণাগুলি 3 এবং 4 সংস্করণেও প্রযোজ্য।

আপনার জেমফাইলে শ্রাইনের রত্নটি ফেলে দিন:

মণি "মজার"

তারপর চালান:

বান্ডেল ইনস্টল

এখন আমাদের একটি মডেলের প্রয়োজন হবে যাকে আমি Photo বলতে যাচ্ছি . শ্রাইন ফাইল-সম্পর্কিত সমস্ত তথ্য একটি বিশেষ পাঠ্য কলামে সঞ্চয় করে যা একটি _data দিয়ে শেষ হয় প্রত্যয়. সংশ্লিষ্ট মাইগ্রেশন তৈরি করুন এবং প্রয়োগ করুন:

rails g মডেল ছবির শিরোনাম:string image_data:texttrails db:migrate

মনে রাখবেন যে রেলের পুরানো সংস্করণগুলির জন্য, পরবর্তী কমান্ডটি হওয়া উচিত:

rake db:migrate

মন্দিরের জন্য কনফিগারেশন বিকল্পগুলি বিশ্বব্যাপী এবং প্রতি-মডেল উভয়ই সেট করা যেতে পারে। গ্লোবাল সেটিংস করা হয়, অবশ্যই, ইনিশিয়ালাইজার ফাইলের ভিতরে। সেখানে আমি প্রয়োজনীয় ফাইল এবং প্লাগইন হুক আপ করতে যাচ্ছি . প্লাগইনগুলি শ্রাইনে ব্যবহার করা হয় আলাদা মডিউলগুলিতে কার্যকারিতার টুকরোগুলি বের করতে, আপনাকে সমস্ত উপলব্ধ বৈশিষ্ট্যগুলির সম্পূর্ণ নিয়ন্ত্রণ দেয়৷ উদাহরণস্বরূপ, যাচাইকরণ, চিত্র প্রক্রিয়াকরণ, ক্যাশিং সংযুক্তি এবং আরও অনেক কিছুর জন্য প্লাগইন রয়েছে।

আপাতত, দুটি প্লাগইন যোগ করা যাক:একটি ActiveRecord সমর্থন করার জন্য এবং আরেকটি লগিং সেট আপ করার জন্য। তারা বিশ্বব্যাপী অন্তর্ভুক্ত করা যাচ্ছে. এছাড়াও, ফাইল সিস্টেম স্টোরেজ সেট আপ করুন:

config/initializers/shrine.rb

require "shrine"require "shrine/storage/file_system"Shrine.plugin :activerecordShrine.plugin :logging, logger:Rails.loggerShrine.storages ={ ক্যাশে:তীর্থ::Storage::FileSystem.new("public", উপসর্গ:"আপলোড/ক্যাশে"), দোকান:শ্রেন::সঞ্চয়স্থান::FileSystem.new("public", উপসর্গ:"uploads/store"), }

লগার আপনার জন্য কনসোলের ভিতরে কিছু ডিবাগিং তথ্য আউটপুট করবে যে একটি ফাইল প্রক্রিয়া করতে কত সময় ব্যয় হয়েছে। এটি কাজে আসতে পারে।

2015-10-09T20:06:06.676Z #25602:STORE[cache] ImageUploader[:avatar] User[29543] 1 ফাইল (0.1s)2015-10-09T20:06:06.854Z:PROSS #2560 স্টোর]:ImageUploader[:avatar] User[29543] 1-3 ফাইল (0.22s)2015-10-09T20:06:07.133Z #25602:DELETE[নষ্ট]:ImageUploader[:avatar] User[29543] 0.07s)

সমস্ত আপলোড করা ফাইল পাবলিক/আপলোড-এর ভিতরে সংরক্ষণ করা হবে ডিরেক্টরি আমি গিটে এই ফাইলগুলি ট্র্যাক করতে চাই না, তাই এই ফোল্ডারটি বাদ দিন:

.gitignore

পাবলিক/আপলোড

এখন একটি বিশেষ "আপলোডার" ক্লাস তৈরি করুন যা মডেল-নির্দিষ্ট সেটিংস হোস্ট করতে যাচ্ছে। আপাতত, এই ক্লাসটি খালি হতে চলেছে:

models/image_uploader.rb

ক্লাস ইমেজ আপলোডার  

সবশেষে, Photo-এর ভিতরে এই ক্লাসটি অন্তর্ভুক্ত করুন মডেল:

models/photo.rb

ইমেজ আপলোডার অন্তর্ভুক্ত করুন[:image]

[:image] একটি ভার্চুয়াল বৈশিষ্ট্য যোগ করে যা একটি ফর্ম তৈরি করার সময় ব্যবহার করা হবে। উপরের লাইনটি এভাবে পুনরায় লেখা যেতে পারে:

 ImageUploader.attachment(:image) # অন্তর্ভুক্ত করুন অথবা ImageUploader::Attachment.new(:image) অন্তর্ভুক্ত করুন 

চমৎকার! এখন মডেলটি শ্রাইনের কার্যকারিতা দিয়ে সজ্জিত, এবং আমরা পরবর্তী ধাপে যেতে পারি।

কন্ট্রোলার, ভিউ, এবং রুট

এই ডেমোর উদ্দেশ্যে, আমাদের ফটোগুলি পরিচালনা করার জন্য শুধুমাত্র একটি নিয়ামকের প্রয়োজন হবে৷ index পৃষ্ঠাটি রুট হিসাবে কাজ করবে:

pages_controller.rb

ক্লাস ফটোকন্ট্রোলার  

দৃশ্য:

views/photos/index.html.erb

ফটো

<%=link_to 'ফটো যোগ করুন', new_photo_path %><%=রেন্ডার @photos %>

@photos রেন্ডার করার জন্য অ্যারে, একটি আংশিক প্রয়োজন:

views/photos/_photo.html.erb

<% যদি photo.image_data? %> <%=image_tag photo.image_url %> <% end %>

<%=photo.title %> | <%=link_to 'Edit', edit_photo_path(photo) %>

image_data? ActiveRecord দ্বারা উপস্থাপিত একটি পদ্ধতি যা একটি রেকর্ডের একটি চিত্র আছে কিনা তা পরীক্ষা করে৷

image_url এটি একটি তীর্থ পদ্ধতি যা কেবল মূল চিত্রের একটি পথ ফিরিয়ে দেয়। অবশ্যই, এর পরিবর্তে একটি ছোট থাম্বনেইল প্রদর্শন করা অনেক ভাল, তবে আমরা পরে এটির যত্ন নেব।

সমস্ত প্রয়োজনীয় রুট যোগ করুন:

config/routes.rb

 সম্পদ :ফটো, শুধুমাত্র:[:new, :create, :index, :edit, :update] root 'photos#index'

এই হল—গ্রাউন্ডওয়ার্ক হয়ে গেছে, এবং আমরা আকর্ষণীয় অংশে এগিয়ে যেতে পারি!

ফাইল আপলোড করা হচ্ছে

এই বিভাগে আমি আপনাকে দেখাব কিভাবে ফাইল আপলোড করার জন্য কার্যকারিতা যোগ করতে হয়। নিয়ন্ত্রক ক্রিয়া খুব সহজ:

photos_controller.rb

def new @photo =Photo.newenddef @photo =Photo.new(photo_params) যদি @photo.save Flash[:success] ='ফটো যোগ করা হয়!' redirect_to photos_path অন্যথায় 'new' endend
রেন্ডার করুন

একমাত্র পাওয়া হল শক্তিশালী প্যারামিটারের জন্য আপনাকে image অনুমতি দিতে হবে ভার্চুয়াল অ্যাট্রিবিউট, image_data নয় .

photos_controller.rb

privateef photo_params params.require(:photo).permit(:title, :image)end

new তৈরি করুন দেখুন:

views/photos/new.html.erb

ফটো যোগ করুন

<%=রেন্ডার 'ফর্ম' %>

ফর্মের আংশিকও তুচ্ছ:

views/photos/_form.html.erb

<%=form_for @photo do |f| %> <%="shared/errors" রেন্ডার করুন, অবজেক্ট:@photo %> <%=f.label :title %> <%=f.text_field :title %> <%=f.label :image %> <% =f.file_field :image %> <%=f.submit %><% end %>

আবার, মনে রাখবেন যে আমরা image ব্যবহার করছি বৈশিষ্ট্য, image_data নয় .

সবশেষে, ত্রুটি প্রদর্শনের জন্য আরেকটি আংশিক যোগ করুন:

views/shared/_errors.html.erb

<% if object.errors.any? %> 

নিম্নলিখিত ত্রুটিগুলি পাওয়া গেছে:

    <% object.errors.full_messages.each do |message| %>
  • <%=বার্তা %>
  • <% end %>
<% end %>

এটি মোটামুটি সবই—আপনি এখনই ছবি আপলোড করা শুরু করতে পারেন৷

বৈধতা

অবশ্যই, ডেমো অ্যাপটি সম্পূর্ণ করতে আরও অনেক কাজ করতে হবে। প্রধান সমস্যা হল যে ব্যবহারকারীরা যে কোনও আকারের সাথে যে কোনও ধরণের ফাইল আপলোড করতে পারে, যা বিশেষভাবে দুর্দান্ত নয়। অতএব, বৈধতা সমর্থন করতে অন্য প্লাগইন যোগ করুন:

config/inititalizers/shrine.rb

Shrine.plugin :validation_helpers

ImageUploader-এর জন্য বৈধতা লজিক সেট আপ করুন :

models/image_uploader.rb

Attacher.validate do validate_max_size 1.megabyte, বার্তা:"খুব বড় (সর্বোচ্চ 1 MB)" validate_mime_type_inclusion ['image/jpg', 'image/jpeg', 'image/png']শেষ

আমি শুধুমাত্র JPG এবং PNG ছবি 1MB এর কম আপলোড করার অনুমতি দিচ্ছি। আপনি উপযুক্ত মনে এই নিয়ম পরিবর্তন করুন.

MIME প্রকারগুলি

উল্লেখ্য আরেকটি গুরুত্বপূর্ণ বিষয় হল যে, ডিফল্টরূপে, শ্রাইন কনটেন্ট-টাইপ HTTP হেডার ব্যবহার করে একটি ফাইলের MIME প্রকার নির্ধারণ করবে। এই শিরোনামটি ব্রাউজার দ্বারা পাস করা হয়েছে এবং শুধুমাত্র ফাইলের এক্সটেনশনের উপর ভিত্তি করে সেট করা হয়েছে, যা সবসময় কাম্য নয়৷

আপনি যদি ফাইলের বিষয়বস্তুর উপর ভিত্তি করে MIME প্রকার নির্ধারণ করতে চান, তাহলে determine_mime_type নামে একটি প্লাগইন ব্যবহার করুন। আমি এটি আপলোডার ক্লাসের মধ্যে অন্তর্ভুক্ত করব, কারণ অন্যান্য মডেলের জন্য এই কার্যকারিতার প্রয়োজন নাও হতে পারে:

models/image_uploader.rb

প্লাগইন :determine_mime_type

এই প্লাগইনটি ডিফল্টরূপে লিনাক্সের ফাইল ইউটিলিটি ব্যবহার করতে যাচ্ছে।

সংযুক্ত ছবি ক্যাশ করা

বর্তমানে, যখন একজন ব্যবহারকারী ভুল তথ্য সহ একটি ফর্ম পাঠান, ফর্মটি উপরে রেন্ডার করা ত্রুটিগুলির সাথে আবার প্রদর্শিত হবে৷ সমস্যা, যাইহোক, সংযুক্ত ছবি হারিয়ে যাবে, এবং ব্যবহারকারীকে এটি আবার নির্বাচন করতে হবে। ক্যাশেড_অ্যাটাচমেন্ট_ডেটা নামে আরেকটি প্লাগইন ব্যবহার করে এটি ঠিক করা খুবই সহজ:

models/image_uploader.rb

প্লাগইন :ক্যাশেড_অ্যাটাচমেন্ট_ডেটা

এখন আপনার ফর্মে একটি লুকানো ক্ষেত্র যোগ করুন৷

views/photos/_form.html.erb

<%=f.hidden_field :image, value:@photo.cached_image_data %><%=f.label :image %><%=f.file_field :image %>

একটি ফটো সম্পাদনা

এখন ছবিগুলি আপলোড করা যেতে পারে, তবে সেগুলি সম্পাদনা করার কোনও উপায় নেই, তাই এখনই এটি ঠিক করা যাক৷ সংশ্লিষ্ট নিয়ামকের ক্রিয়াগুলি কিছুটা তুচ্ছ:

photos_controller.rb

def edit @photo =Photo.find(params[:id])enddef update @photo =Photo.find(params[:id]) যদি @photo.update_attributes(photo_params) ফ্ল্যাশ[:success] ='ফটো সম্পাদিত !' redirect_to photos_path অন্যথায় রেন্ডার 'সম্পাদনা' endend

একই _form আংশিক ব্যবহার করা হবে:

views/photos/edit.html.erb

ফটো সম্পাদনা করুন

<%=রেন্ডার 'ফর্ম' %>

চমৎকার, কিন্তু পর্যাপ্ত নয়:ব্যবহারকারীরা এখনও একটি আপলোড করা ছবি সরাতে পারবেন না। এটির অনুমতি দেওয়ার জন্য, আমাদের প্রয়োজন হবে—অনুমান কী—অন্য একটি প্লাগইন: 

models/image_uploader.rb

প্লাগইন :remove_attachment

এটি :remove_image নামে একটি ভার্চুয়াল অ্যাট্রিবিউট ব্যবহার করে , তাই কন্ট্রোলারের ভিতরে অনুমতি দিন:

photos_controller.rb

def photo_params params.require(:photo).permit(:title, :image, :remove_image)end

এখন শুধু একটি ছবি অপসারণের জন্য একটি চেকবক্স প্রদর্শন করুন যদি একটি রেকর্ডের জায়গায় একটি সংযুক্তি থাকে:

views/photos/_form.html.erb

<% যদি @photo.image_data? %> সংযুক্তি সরান:<%=f.check_box :remove_image %><% end %>

একটি থাম্বনেইল ছবি তৈরি করা হচ্ছে

বর্তমানে আমরা আসল চিত্রগুলি প্রদর্শন করি, যা পূর্বরূপগুলির জন্য সর্বোত্তম পদ্ধতি নয়:ফটোগুলি বড় হতে পারে এবং খুব বেশি স্থান দখল করতে পারে৷ অবশ্যই, আপনি CSS width ব্যবহার করতে পারেন এবং height গুণাবলী, কিন্তু যে হিসাবে একটি খারাপ ধারণা. আপনি দেখতে পাচ্ছেন, শৈলী ব্যবহার করে চিত্রটি ছোট হিসাবে সেট করা হলেও, ব্যবহারকারীকে এখনও আসল ফাইল ডাউনলোড করতে হবে, যা বেশ বড় হতে পারে৷

অতএব, প্রাথমিক আপলোডের সময় সার্ভারের দিকে একটি ছোট প্রিভিউ ইমেজ তৈরি করা অনেক ভালো। এতে দুটি প্লাগইন এবং দুটি অতিরিক্ত রত্ন জড়িত। প্রথমত, রত্নগুলি ফেলে দিন:

gem "image_processing"gem "mini_magick", ">=4.3.5"

ইমেজ_প্রসেসিং হল শ্রাইনের লেখকের তৈরি একটি বিশেষ রত্ন। এটি ইমেজ ম্যানিপুলেট করার জন্য কিছু উচ্চ-স্তরের সহায়ক পদ্ধতি উপস্থাপন করে। এই রত্নটি, mini_magick-এর উপর নির্ভর করে, ImageMagick-এর জন্য একটি রুবি মোড়ক। আপনি যেমন অনুমান করেছেন, এই ডেমো চালানোর জন্য আপনার সিস্টেমে ImageMagick এর প্রয়োজন হবে৷

এই নতুন রত্ন ইনস্টল করুন:

বান্ডেল ইনস্টল

এখন প্লাগইনগুলিকে তাদের নির্ভরতা সহ অন্তর্ভুক্ত করুন:

models/image_uploader.rb

"image_processing/mini_magick" ক্লাস ইমেজ আপলোডার প্রয়োজন <শ্রাইনে ইমেজপ্রসেসিং::মিনিম্যাজিক প্লাগইন :প্রসেসিং প্লাগইন :সংস্করণ # অন্য কোড...এন্ড

প্রসেসিং হল সেই প্লাগইন যা আমাদেরকে একটি ছবি ব্যবহার করতে দেয় (উদাহরণস্বরূপ, এটিকে সঙ্কুচিত করা, ঘোরানো, অন্য ফর্ম্যাটে রূপান্তর করা ইত্যাদি)। সংস্করণ, ঘুরে, আমাদের বিভিন্ন বৈকল্পিক একটি ইমেজ আছে অনুমতি দেয়. এই ডেমোর জন্য, দুটি সংস্করণ সংরক্ষণ করা হবে:"অরিজিনাল" এবং "থাম্ব" (300x300 এর আকার পরিবর্তন করুন )।

এখানে একটি ইমেজ প্রসেস করার এবং এর দুটি সংস্করণ সংরক্ষণ করার কোড রয়েছে:

models/image_uploader.rb

<প্রি>ক্লাস ইমেজ আপলোডার <শ্রাইন প্রসেস(:স্টোর) ডু |io, প্রসঙ্গ| { মূল:io, থাম্ব:resize_to_limit!(io.download, 300, 300) } শেষ করুন

resize_to_limit! ইমেজ_প্রসেসিং জেম দ্বারা প্রদত্ত একটি পদ্ধতি। এটি সহজভাবে একটি ছবিকে 300x300 এ সঙ্কুচিত করে যদি এটি বড় হয় এবং ছোট হলে কিছুই করে না। তাছাড়া, এটি মূল আকৃতির অনুপাত বজায় রাখে।

এখন ছবি প্রদর্শন করার সময়, আপনাকে শুধুমাত্র :original প্রদান করতে হবে অথবা :thumb image_url-এর যুক্তি পদ্ধতি:

views/photos/_photo.html.erb

<% যদি photo.image_data? %> <%=image_tag photo.image_url(:thumb) %> <% end %>

<%=photo.title %> | <%=link_to 'Edit', edit_photo_path(photo) %>

ফর্মের ভিতরেও একই কাজ করা যেতে পারে:

views/photos/_form.html.erb

<% যদি @photo.image_data? %> <%=image_tag @photo.image_url(:thumb) %> সংযুক্তি সরান:<%=f.check_box :remove_image %><% end %>

আপলোড সম্পূর্ণ হওয়ার পরে প্রক্রিয়াকৃত ফাইলগুলি স্বয়ংক্রিয়ভাবে মুছে ফেলার জন্য, আপনি delete_raw নামে একটি প্লাগইন যোগ করতে পারেন:

models/image_uploader.rb

প্লাগইন :delete_raw

ছবির মেটাডেটা

আসলে একটি ছবি রেন্ডার করা ছাড়াও, আপনি এর মেটাডেটাও আনতে পারেন। আসুন, উদাহরণস্বরূপ, আসল ছবির আকার এবং MIME প্রকার প্রদর্শন করি:

views/photos/_photo.html.erb

<% যদি photo.image_data? %> <%=image_tag photo.image_url(:thumb) %>

সাইজ <%=photo.image[:original].size %> বাইট
MIME প্রকার <%=photo.image[:original]। mime_type %>

<% end %>

<%=photo.title %> | <%=link_to 'Edit', edit_photo_path(photo) %>

তার মাত্রা সম্পর্কে কি? দুর্ভাগ্যবশত, এগুলি ডিফল্টরূপে সংরক্ষণ করা হয় না, তবে স্টোর_ডাইমেনশন নামে একটি প্লাগইন দিয়ে এটি সম্ভব৷

চিত্রের মাত্রা

স্টোর_ডাইমেনশন প্লাগইন ফাস্টইমেজ মণির উপর নির্ভর করে, তাই এখনই এটিকে সংযুক্ত করুন:

মণি 'ফাস্টিমেজ'

চালাতে ভুলবেন না:

বান্ডেল ইনস্টল

এখন শুধু প্লাগইন অন্তর্ভুক্ত করুন:

models/image_uploader.rb

প্লাগইন :store_dimensions

এবং width ব্যবহার করে মাত্রা প্রদর্শন করুন এবং height পদ্ধতি:

views/photos/_photo.html.erb

<% যদি photo.image_data? %> <%=image_tag photo.image_url(:thumb) %>

সাইজ <%=photo.image[:original].size %> বাইট
MIME প্রকার <%=photo.image[:original]। mime_type %>
মাত্রা <%="#{photo.image[:original].width}x#{photo.image[:original].height}" %>

<% end %>

<%=photo.title %> | <%=link_to 'Edit', edit_photo_path(photo) %>

এছাড়াও, একটি dimensions আছে উপলব্ধ পদ্ধতি যা প্রস্থ এবং উচ্চতা সমন্বিত একটি অ্যারে প্রদান করে (উদাহরণস্বরূপ, [500, 750] )।

ক্লাউডে চলে যাওয়া

বিকাশকারীরা প্রায়ই আপলোড করা ফাইলগুলি হোস্ট করার জন্য ক্লাউড পরিষেবাগুলি বেছে নেয় এবং শ্রাইন এমন একটি সম্ভাবনা উপস্থাপন করে। এই বিভাগে, আমি আপনাকে দেখাব কিভাবে Amazon S3 এ ফাইল আপলোড করতে হয়।

প্রথম ধাপ হিসেবে, Gemfile-এ আরও দুটি রত্ন অন্তর্ভুক্ত করুন :

gem "aws-sdk", "~> 2.1"group :development do gem 'dotenv-rails'end

S3-এর SDK-এর সাথে কাজ করার জন্য aws-sdk-এর প্রয়োজন, যেখানে dotenv-rails ব্যবহার করা হবে ডেভেলপমেন্টে এনভায়রনমেন্ট ভেরিয়েবলগুলি পরিচালনা করতে৷

বান্ডেল ইনস্টল

এগিয়ে যাওয়ার আগে, API এর মাধ্যমে S3 অ্যাক্সেস করার জন্য আপনাকে একটি মূল জোড়া পেতে হবে। এটি পেতে, Amazon Web Services Console-এ সাইন ইন করুন (বা সাইন আপ করুন) এবং নিরাপত্তা শংসাপত্র> ব্যবহারকারীদের-এ নেভিগেট করুন . S3 তে ফাইলগুলি পরিচালনা করার অনুমতি সহ একজন ব্যবহারকারী তৈরি করুন। এখানে S3:

-এ সম্পূর্ণ অ্যাক্সেস উপস্থাপন করা সহজ নীতি
{ "সংস্করণ":"2016-11-14", "বিবৃতি":[ { "প্রভাব":"অনুমতি দিন", "অ্যাকশন":"s3:*", "রিসোর্স":"*" } ]} 

তৈরি ব্যবহারকারীর কী জোড়া ডাউনলোড করুন. বিকল্পভাবে, আপনি রুট অ্যাক্সেস কী ব্যবহার করতে পারেন, কিন্তু আমি নিরুৎসাহিত করছি আপনি এটি করা থেকে বিরত থাকুন কারণ এটি খুবই অনিরাপদ।

এরপরে, আপনার ফাইলগুলি হোস্ট করার জন্য একটি S3 বালতি তৈরি করুন এবং আপনার কনফিগারেশন হোস্ট করতে প্রকল্পের রুটে একটি ফাইল যোগ করুন:

.env

S3_KEY=YOUR_KEYS3_SECRET=YOUR_SECRETS3_BUCKET=YOUR_BUCKETS3_REGION=YOUR_REGION

কখনো প্রকাশ করবেন না৷ এই ফাইলটি জনসাধারণের কাছে, এবং নিশ্চিত করুন যে আপনি এটি Git থেকে বাদ দিয়েছেন:

.gitignore

.env

এখন শ্রাইনের গ্লোবাল কনফিগারেশন পরিবর্তন করুন এবং একটি নতুন স্টোরেজ প্রবর্তন করুন:

config/initializers/shrine.rb

require "shrine"require "shrine/storage/s3"s3_options ={ access_key_id:ENV['S3_KEY'], secret_access_key:ENV['S3_SECRET'], অঞ্চল:ENV['S3_REGION'], বালতি:ENV[' S3_BUCKET'],}Shrine.storages ={ cache:Shrine::Storage::FileSystem.new("public", prefix:"uploads/cache"), store:Shrine::Storage::S3.new(উপসর্গ:" স্টোর", **s3_options), }

এটাই! অ্যাপের অন্যান্য অংশগুলিতে কোনও পরিবর্তন করতে হবে না এবং আপনি এখনই এই নতুন স্টোরেজ পরীক্ষা করতে পারেন। আপনি যদি S3 থেকে ভুল কীগুলির সাথে সম্পর্কিত ত্রুটিগুলি পেয়ে থাকেন, তবে নিশ্চিত করুন যে আপনি সঠিকভাবে কী এবং গোপনীয়তা অনুলিপি করেছেন, কোনো ট্রেলিং স্পেস এবং অদৃশ্য বিশেষ চিহ্ন ছাড়াই৷

উপসংহার

আমরা এই নিবন্ধের শেষে এসেছি। আশা করি, এখন পর্যন্ত আপনি শ্রাইন ব্যবহারে অনেক আত্মবিশ্বাসী বোধ করছেন এবং এটিকে আপনার একটি প্রকল্পে নিয়োগ করতে আগ্রহী। আমরা এই রত্নটির অনেক বৈশিষ্ট্য নিয়ে আলোচনা করেছি, তবে আরও কিছু আছে, যেমন ফাইলের সাথে অতিরিক্ত প্রসঙ্গ সংরক্ষণ করার ক্ষমতা এবং সরাসরি আপলোড পদ্ধতি।

তাই, শ্রাইনের ডকুমেন্টেশন এবং এর অফিসিয়াল ওয়েবসাইট ব্রাউজ করুন, যেটি সমস্ত উপলব্ধ প্লাগইনগুলির পুঙ্খানুপুঙ্খভাবে বর্ণনা করে। আপনার যদি এই রত্নটি সম্পর্কে অন্য প্রশ্ন থাকে তবে সেগুলি পোস্ট করতে দ্বিধা করবেন না। আমার সাথে থাকার জন্য আমি আপনাকে ধন্যবাদ, এবং আমি শীঘ্রই দেখা হবে!


  1. রেলের সাথে হটওয়্যার ব্যবহার করা

  2. বাইবাগ, রেল এবং পা দিয়ে রিমোট ডিবাগিং

  3. রেলের সাথে Tailwind CSS ব্যবহার করা

  4. রেলের সাথে কৌণিক ব্যবহার 5