これを行うための可能な方法は、AWSで「ElastiCacheクラスター」を作成し、それを使用するようにRailsに指示することです。
RailsアプリをOpsWorksスタックで実行していますが、2つの異なる理由でredisを使用しています。遅延ジョブにSidekiqを使用することと、キャッシュストアを使用することです。
正しいセキュリティグループを設定することは非常に重要です redis ElastiCacheクラスターの場合、このセキュリティグループはOpsWorksスタックで使用可能である必要があります。
まず、Redis ElastiCacheクラスターを作成します。次に、AWSコンソールに移動し、[EC2]をクリックしてから、[Security Group]([NETWORK&SECURITY]の下)をクリックします。エラスティッククラスターに関連付けられているセキュリティグループIDを使用してセキュリティグループを検索します。
次に、ソースがopsworks内にあるopsworksセキュリティグループであるインバウンドルールを設定します。
EC2->セキュリティグループ:
OpsWorks->レイヤー->RailsApp Serverのセキュリティ:
最後に、Railsプロジェクトで、 config / product.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
クラスタに関連する[ノード]列の下をクリックして、AWSConsoleElastiCacheダッシュボード内のredisURLとポートを取得できます。
sshを介してマシン内で手動で開始する場合を除いて、sidekiqを開始および停止するためのレシピのみが必要です(もちろん、本番環境には適していません)。
この場合、Deployイベント用にOpsWorksスタックにカスタムレシピを追加する必要があります。このレシピは次のようになります。
# 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
お役に立てば幸いです。