Возможный способ сделать это — создать «кластер ElastiCache» на AWS и указать Rails использовать Это.
У меня есть приложение rails, работающее со стеком OpsWorks, и я использую Redis по двум разным причинам: использую Sidekiq для отложенного задания и использую хранилище кеша.
Очень важно установить правильную группу безопасности для вашего кластера Redis ElastiCache, эта группа безопасности должна быть доступна для вашего стека OpsWorks.
Сначала создайте кластер Redis ElastiCache. Затем перейдите в консоль AWS, нажмите «EC2», затем нажмите «Группа безопасности» (в разделе «СЕТЬ И БЕЗОПАСНОСТЬ»). Найдите группу безопасности, используя идентификатор группы безопасности, связанный с вашим кластером elasticache.
Теперь установите правило для входящих подключений, где источником является группа безопасности opsworks, которая у вас есть внутри opsworks.
В вашей группе безопасности EC2 ->: ![введите здесь описание изображения](https://i.stack.imgur .com/Y0L5c.png)
В OpsWorks -> Layers -> Безопасность сервера приложений Rails: ![введите здесь описание изображения](https://i .stack.imgur.com/uFzKB.png)
В конце в вашем проекте Rails отредактируйте файл config/production.rb (при условии, что вы работаете над производственной средой) и добавьте строку, подобную этой, чтобы установить хранилище кеша:
config.cache_store = :redis_store, "redis://#{Rails.application.secrets.redis_host}:#{Rails.application.secrets.redis_port}/0/cache", { expires_in: 90.minutes }
Затем, чтобы заставить Sidekiq использовать Redis, вам понадобится файл config/sidekiq.rb, подобный этому:
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
Вы можете получить URL-адрес Redis и порт на панели мониторинга ElastiCache консоли AWS, щелкнув столбец «Узлы», относящийся к вашему кластеру.
Вам нужен рецепт только для запуска и остановки sidekiq, если только вы не хотите запускать его вручную внутри вашей машины через ssh (конечно, не очень хорошо для производства).
В этом случае вы должны добавить пользовательский рецепт в свой стек OpsWorks для события Deploy. Этот рецепт будет примерно таким:
# 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
Надеюсь, поможет!
person
Diego D
schedule
14.03.2016