sql >> Database >  >> NoSQL >> Redis

Hoe voer ik Redis uit op Amazon OpsWorks voor een Rails-toepassing?

Een mogelijke manier om dit te doen, is door een "ElastiCache-cluster" op AWS te maken en Rails te vertellen om het te gebruiken.

Ik heb mijn rails-app met een OpsWorks-stack en ik gebruik redis om twee verschillende redenen:gebruik Sidekiq voor uitgestelde taken en gebruik de cacheopslag.

Is erg belangrijk om de juiste beveiligingsgroep in te stellen voor uw redis ElastiCache-cluster moet deze beveiligingsgroep beschikbaar zijn voor uw OpsWorks-stack.

Maak eerst uw Redis ElastiCache-cluster. Ga vervolgens naar uw AWS-console, klik op "EC2" en klik vervolgens op "Beveiligingsgroep" (onder NETWERK &BEVEILIGING). Zoek in de beveiligingsgroep met behulp van de beveiligingsgroep-ID die is gekoppeld aan uw elasticache-cluster.

Stel nu een inkomende regel in waarbij de bron de opsworks-beveiligingsgroep is die u binnen opsworks hebt.

In uw EC2 -> Beveiligingsgroep:

In OpsWorks -> Lagen -> Rails App Server-beveiliging:

Aan het einde, in je Rails-project, bewerk je config/production.rb bestand (ervan uitgaande dat u voor productie-env werkt) en voeg een regel als deze toe om uw cache-archief in te stellen:

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

Om Sidekiq Redis te laten gebruiken, hebt u een config/sidekiq.rb . nodig bestand als volgt:

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

U kunt de redis-URL en -poort ophalen in uw AWS Console ElastiCache-dashboard door te klikken onder de kolom Nodes gerelateerd aan uw cluster.

Je hebt alleen een recept nodig om sidekiq te starten en te stoppen, tenzij je het handmatig in je machine wilt starten via ssh (natuurlijk niet goed voor productie).

In dit geval moet je een aangepast recept toevoegen aan je OpsWorks-stack, voor de Deploy-gebeurtenis. Dit recept ziet er ongeveer zo uit:

# 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

Ik hoop dat het helpt!




  1. Kan iemand het redis setbit-commando uitleggen?

  2. Basis HTML-weergave weergeven?

  3. 5 manieren om documenten in MongoDB in te voegen

  4. Inleiding tot Spring Data MongoDB