ऐसा करने का एक संभावित तरीका एडब्ल्यूएस पर "इलास्टी कैश क्लस्टर" बनाना है और रेल को इसका इस्तेमाल करने के लिए कहना है।
मेरे पास मेरा रेल ऐप ओप्सवर्क्स स्टैक के साथ चल रहा है और मैं दो अलग-अलग कारणों से रेडिस का उपयोग करता हूं:विलंबित नौकरी के लिए साइडकीक का उपयोग करें और कैश स्टोर का उपयोग करें।
सही सुरक्षा समूह सेट करना बहुत महत्वपूर्ण है आपके redis ElastiCache क्लस्टर के लिए, यह सुरक्षा समूह आपके OpsWorks स्टैक के लिए उपलब्ध होना चाहिए।
पहले अपना Redis ElastiCache क्लस्टर बनाएं। फिर अपने AWS कंसोल में जाएं, "EC2" पर क्लिक करें, फिर "सुरक्षा समूह" (नेटवर्क और सुरक्षा के तहत) पर क्लिक करें। अपने इलास्टिकैश क्लस्टर से संबद्ध सुरक्षा समूह आईडी का उपयोग करके सुरक्षा समूह खोजें।
अब एक इनबाउंड नियम सेट करें जहां स्रोत opsworks सुरक्षा समूह है जो आपके पास opsworks के अंदर है।
आपके EC2 -> सुरक्षा समूह में:
OpsWorks में -> परतें -> रेल ऐप सर्वर सुरक्षा:
अंत में, आप रेल परियोजना में, अपना config/production.rb edit संपादित करें फ़ाइल (यह मानते हुए कि आप उत्पादन env के लिए काम कर रहे हैं) और अपना कैश स्टोर सेट करने के लिए इस तरह की एक पंक्ति जोड़ें:
config.cache_store = :redis_store, "redis://#{Rails.application.secrets.redis_host}:#{Rails.application.secrets.redis_port}/0/cache", { expires_in: 90.minutes }
फिर साइडकीक को रेडिस का उपयोग करने के लिए, आपको एक config/sidekiq.rb . की आवश्यकता होगी इस तरह फाइल करें:
Sidekiq.configure_server do |config|
config.redis = { url: "redis://#{Rails.application.secrets.redis_host}:#{Rails.application.secrets.redis_port}/12", network_timeout: Rails.application.secrets.redis_timeout }
end
Sidekiq.configure_client do |config|
config.redis = { url: "redis://#{Rails.application.secrets.redis_host}:#{Rails.application.secrets.redis_port}/12", network_timeout: Rails.application.secrets.redis_timeout }
end
आप अपने क्लस्टर से संबंधित नोड्स कॉलम के तहत क्लिक करके अपने एडब्ल्यूएस कंसोल इलास्टी कैश डैशबोर्ड के अंदर रेडिस यूआरएल और पोर्ट को पुनः प्राप्त कर सकते हैं।
साइडकीक को शुरू और बंद करने के लिए आपको केवल एक नुस्खा की आवश्यकता है, जब तक कि आप इसे मैन्युअल रूप से एसएसएच के माध्यम से अपनी मशीन के अंदर शुरू नहीं करना चाहते (निश्चित रूप से उत्पादन के लिए अच्छा नहीं है)।
इस मामले में आपको अपने OpsWorks स्टैक में एक कस्टम नुस्खा जोड़ना होगा, परिनियोजन ईवेंट के लिए। यह नुस्खा कुछ इस तरह होगा:
# Recipe used for a deploy event
Chef::Log.info("Restart Sidekiq...")
node[:deploy].each do |application, deploy|
deploy_to = node[:deploy][application][:deploy_to]
rails_env = node[:deploy][application][:rails_env]
execute "sidekiq stop" do
user "deploy"
cwd "#{deploy_to}/current/"
command "bundle exec sidekiqctl stop tmp/pids/sidekiq.pid"
environment "RAILS_ENV" => rails_env
only_if { "ps aux | grep [s]idekiq" }
end
bash "bundle" do
user "deploy"
cwd "#{deploy_to}/current/"
code <<-EOH
RAILS_ENV="#{rails_env}" bundle exec sidekiq --index 0 --pidfile tmp/pids/sidekiq.pid --environment "#{rails_env}" --logfile log/sidekiq.log --daemon
EOH
end
end
आशा है कि यह मदद करेगा!