tutorial rails que elastic docs deploy aws ruby-on-rails ruby amazon-web-services redis aws-opsworks

ruby on rails - que - ¿Cómo ejecutar Redis en Amazon OpsWorks para una aplicación de Rails?



elastic beanstalk docs (1)

Estoy intentando configurar la instancia / capa de Redis en el entorno de Amazon OpsWorks para el almacenamiento en caché y Sidekiq, pero no puedo hacer que la aplicación Rails se comunique con Redis.

¿Necesito una receta de chef para eso sin importar nada? Intenté crear Redis en una capa separada, agregué una instancia a esta capa, pero no puedo encontrar una manera de hacer que los Rails y Redis se comuniquen entre sí.

¿Algún consejo sobre cómo hacerlo?

Gracias


Una posible forma de hacerlo es crear un " cluster ElastiCache " en AWS y decirle a Rails que lo use.

Tengo mi aplicación Rails ejecutándose con una pila OpsWorks y uso Redis por dos razones diferentes: use Sidekiq para trabajo retrasado y use la tienda de caché.

Es muy importante establecer el grupo de seguridad correcto para su clúster ElastiCache redis, este grupo de seguridad debe estar disponible para su pila OpsWorks.

Primero crea tu cluster Redis ElastiCache. A continuación, vaya a la consola de AWS, haga clic en "EC2", luego haga clic en "Grupo de seguridad" (en RED Y SEGURIDAD). Busque el grupo de seguridad utilizando la identificación del grupo de seguridad asociada a su clúster elasticache.

Ahora establece una regla de entrada donde la fuente es el grupo de seguridad opsworks que tienes dentro de opsworks.

En su EC2 -> Grupo de seguridad:

En OpsWorks -> Capas -> Rails App Server Security:

Al final, en su proyecto Rails, edite su archivo config / production.rb (suponiendo que esté trabajando para el entorno de producción) y agregue una línea como esta para configurar su almacén de caché:

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

Luego, para que Sidekiq use Redis, necesita un archivo config / sidekiq.rb como este:

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

Puede recuperar el URL redis y el puerto dentro de su AWS Console ElastiCache Dashboard, haciendo clic en la columna Nodos relacionada con su clúster.

Solo necesita una receta para iniciar y detener sidekiq, a menos que desee iniciarla manualmente dentro de su máquina a través de ssh (por supuesto, no es bueno para la producción).

En este caso, debe agregar una receta personalizada a su pila OpsWorks, para el evento Deploy. Esta receta será algo como esto:

# 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

¡Espero eso ayude!