sql >> Database teknologi >  >> NoSQL >> Redis

Hvordan kører man Redis på Amazon OpsWorks for en Rails-applikation?

En mulig måde at gøre det på er at oprette en "ElastiCache-klynge" på AWS og fortælle Rails om at bruge den.

Jeg har min rails-app kørende med en OpsWorks-stack, og jeg bruger redis af to forskellige årsager:Brug Sidekiq til forsinket job og brug cachelageret.

Det er meget vigtigt at indstille den korrekte sikkerhedsgruppe for din redis ElastiCache-klynge skal denne sikkerhedsgruppe være tilgængelig for din OpsWorks-stak.

Opret først din Redis ElastiCache-klynge. Gå derefter ind i din AWS-konsol, klik på "EC2", klik derefter på "Sikkerhedsgruppe" (under NETVÆRK &SIKKERHED). Søg i sikkerhedsgruppen ved hjælp af det sikkerhedsgruppe-id, der er knyttet til din elasticache-klynge.

Indstil nu en indgående regel, hvor kilden er opsworks-sikkerhedsgruppen, som du har inde i opsworks.

I din EC2 -> Sikkerhedsgruppe:

I OpsWorks -> Lag -> Rails App Server Security:

Til sidst, i dit Rails-projekt, rediger din config/production.rb fil (forudsat at du arbejder for produktionsenv) og tilføj en linje som denne for at indstille din cachelager:

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

Så for at få Sidekiq til at bruge Redis, skal du bruge en config/sidekiq.rb fil som denne:

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

Du kan hente redis URL'en og porten inde i dit AWS Console ElastiCache Dashboard ved at klikke på kolonnen Nodes relateret til din klynge.

Du behøver kun en opskrift for at starte og stoppe sidekiq, medmindre du vil starte den manuelt ved at gå ind i din maskine via ssh (selvfølgelig ikke godt for produktion).

I dette tilfælde skal du tilføje en brugerdefineret opskrift til din OpsWorks-stak til Deploy-begivenheden. Denne opskrift vil være sådan her:

# 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

Håber det hjælper!




  1. Find dokumenter med arrays, der ikke indeholder et dokument med en bestemt feltværdi i MongoDB

  2. Hvordan kan jeg få optællingen af ​​nøgler i redis?

  3. Laravel - Slet alle cache / redis nøgler, der indeholder en specifik streng

  4. MongoDB, fjern objekt fra array