Redis
 sql >> Baza danych >  >> NoSQL >> Redis

Jak uruchomić Redis na Amazon OpsWorks dla aplikacji Rails?

Możliwym sposobem, aby to zrobić, jest utworzenie "klastra ElastiCache" na AWS i polecenie Railsom, aby go używali.

Mam aplikację Rails działającą ze stosem OpsWorks i używam redis z dwóch różnych powodów:używam Sidekiq do opóźnionych zadań i używam pamięci podręcznej.

Bardzo ważne jest ustawienie prawidłowej grupy bezpieczeństwa w przypadku klastra redis ElastiCache ta grupa zabezpieczeń musi być dostępna dla stosu OpsWorks.

Najpierw utwórz klaster Redis ElastiCache. Następnie przejdź do konsoli AWS, kliknij „EC2”, a następnie „Grupa bezpieczeństwa” (w sekcji SIEĆ I ZABEZPIECZENIA). Wyszukaj grupę bezpieczeństwa przy użyciu identyfikatora grupy bezpieczeństwa powiązanego z twoim klastrem elasticache.

Teraz ustaw regułę Inbound, gdzie źródłem jest grupa bezpieczeństwa opsworks, którą masz w opsworks.

W Twojej EC2 -> Security Group:

W OpsWorks -> Warstwy -> Rails App Server Security:

Na koniec, w swoim projekcie Railsowym, edytuj swój config/production.rb plik (zakładając, że pracujesz w środowisku produkcyjnym) i dodaj linię taką jak ta, aby ustawić magazyn pamięci podręcznej:

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

Następnie, aby Sidekiq używał Redis, potrzebujesz config/sidekiq.rb plik w ten sposób:

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

Możesz pobrać adres URL redis i port w panelu kontrolnym konsoli AWS ElastiCache, klikając w kolumnie Węzły związanej z klastrem.

Potrzebujesz przepisu tylko do uruchamiania i zatrzymywania sidekiq, chyba że chcesz uruchomić go ręcznie, przechodząc do komputera przez ssh (oczywiście nie jest to dobre dla produkcji).

W takim przypadku musisz dodać niestandardowy przepis do swojego stosu OpsWorks na potrzeby wydarzenia Wdrożenie. Ten przepis będzie wyglądał mniej więcej tak:

# 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

Mam nadzieję, że to pomoże!




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Rdbtools na Redis Conf18

  2. Używać wielu baz danych z jednym skryptem Redis Lua?

  3. Błąd integracji Redis z JHipster CacheConfiguration

  4. Kluczowy projekt Redis do aplikacji magazynowych w czasie rzeczywistym

  5. Pobieranie wartości za pomocą potoku jedis