sql >> データベース >  >> NoSQL >> Redis

Railsアプリケーション用にAmazonOpsWorksでRedisを実行するにはどうすればよいですか?

    これを行うための可能な方法は、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
    

    お役に立てば幸いです。




    1. MongoDBでSpringBootを使用する方法

    2. プログラムでRedisQueue(rq)のQueue()を破棄/削除する

    3. $lookupMongodbのLocalFieldで文字列をobjectIdに変換する方法

    4. MongoDBとは何ですか?どのように機能しますか?