Възможен начин да го направите е да създадете „клъстер ElastiCache“ на AWS и да кажете на Rails да го използва.
Моето rails приложение работи със стек OpsWorks и използвам redis по две различни причини:използвам Sidekiq за отложена работа и използвам кеш магазина.
Много е важно да зададете правилнатагрупа за сигурност за вашия redis ElastiCache клъстер, тази група за защита трябва да е налична за вашия стек OpsWorks.
Първо създайте своя Redis ElastiCache клъстер. След това отидете в конзолата на AWS, щракнете върху „EC2“, след това щракнете върху „Група за сигурност“ (под МРЕЖА И СИГУРНОСТ). Търсете в групата за защита, като използвате идентификатора на групата за защита, свързан с вашия клъстер за еластична памет.
Сега задайте входящо правило, където източникът е групата за сигурност на opsworks, която имате в opsworks.
Във вашата EC2 -> Security Group:
В OpsWorks -> Слоеве -> Rails App Server Security:
В края, във вашия проект Rails, редактирайте вашия config/production.rb файл (ако приемем, че работите за производствена env) и добавете ред като този, за да зададете своя кеш магазин:
config.cache_store = :redis_store, "redis://#{Rails.application.secrets.redis_host}:#{Rails.application.secrets.redis_port}/0/cache", { expires_in: 90.minutes }
След това, за да накарате Sidekiq да използва Redis, имате нужда от 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
Можете да извлечете URL адреса и порта на redis в таблото за управление на AWS Console ElastiCache, като щракнете върху колоната Nodes, свързана с вашия клъстер.
Имате нужда от рецепта само за стартиране и спиране sidekiq, освен ако не искате да я стартирате ръчно, влизайки във вашата машина чрез ssh (разбира се, не е добре за производство).
В този случай трябва да добавите персонализирана рецепта към вашия стек OpsWorks за събитието Deploy. Тази рецепта ще бъде нещо подобно:
# 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
Надявам се да помогне!