sql >> Databáze >  >> NoSQL >> Redis

Jak spustit Redis na Amazon OpsWorks pro aplikaci Rails?

Možným způsobem, jak to udělat, je vytvořit "ElastiCache cluster" na AWS a říct Rails, aby jej použil.

Mám svou aplikaci rails spuštěnou se zásobníkem OpsWorks a používám redis ze dvou různých důvodů:pro zpožděnou práci používám Sidekiq a používám úložiště mezipaměti.

Je velmi důležité nastavit správnou bezpečnostní skupinu pro váš cluster redis ElastiCache musí být tato skupina zabezpečení dostupná pro váš stack OpsWorks.

Nejprve vytvořte svůj cluster Redis ElastiCache. Poté přejděte do konzole AWS, klikněte na „EC2“ a poté klikněte na „Security Group“ (v části SÍŤ &ZABEZPEČENÍ). Vyhledejte skupinu zabezpečení pomocí ID skupiny zabezpečení přidružené k vašemu clusteru elasticache.

Nyní nastavte příchozí pravidlo, kde zdrojem je bezpečnostní skupina opsworks, kterou máte uvnitř opsworks.

Ve vaší EC2 -> Security Group:

V OpsWorks -> Vrstvy -> Zabezpečení serveru Rails App Server:

Na konci ve svém projektu Rails upravte config/production.rb soubor (za předpokladu, že pracujete pro produkční prostředí) a přidejte řádek jako tento pro nastavení úložiště mezipaměti:

config.cache_store = :redis_store, "redis://#{Rails.application.secrets.redis_host}:#{Rails.application.secrets.redis_port}/0/cache", { expires_in: 90.minutes }

Chcete-li, aby Sidekiq používal Redis, potřebujete config/sidekiq.rb soubor takto:

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

Adresu URL a port redis můžete získat z ovládacího panelu ElastiCache konzoly AWS kliknutím na sloupec Nodes související s vaším clusterem.

Recept potřebujete pouze ke spuštění a zastavení sidekiq, pokud jej nechcete spustit ručně ve vašem stroji přes ssh (samozřejmě to není dobré pro výrobu).

V tomto případě musíte přidat vlastní recept do svého zásobníku OpsWorks pro událost Deploy. Tento recept bude vypadat nějak takto:

# 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

Doufám, že to pomůže!




  1. docker-compose + django + redis - Chyba 111 při připojování k 127.0.0.1:6379. Spojení odmítnuto

  2. Připojení k databázím MongoDB

  3. Co je třída Hadoop Reducer v MapReduce?

  4. Potřebujete pomoc s konceptualizací v Redis/NoSQL