Redis
 sql >> база данни >  >> NoSQL >> Redis

Как да стартирате Redis на Amazon OpsWorks за Rails приложение?

Възможен начин да го направите е да създадете „клъстер 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

Надявам се да помогне!




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. RedisClient LUA API

  2. Бързо справочно ръководство за различни NoSQL бази данни

  3. Redis хеш е много бавна скорост на писане

  4. Как да внедрите поток от фючърси за блокиращо обаждане с помощта на futures.rs и Redis PubSub?

  5. Redis, винаги ли една тема (пъб/суб) ще се доставя на поне един абонат?