Redis
 sql >> Teknologi Basis Data >  >> NoSQL >> Redis

Bagaimana cara menjalankan Redis di Amazon OpsWorks untuk aplikasi Rails?

Cara yang mungkin untuk melakukannya adalah dengan membuat "klaster ElastiCache" di AWS dan meminta Rails untuk menggunakannya.

Saya menjalankan aplikasi Rails dengan tumpukan OpsWorks dan saya menggunakan redis karena dua alasan berbeda:gunakan Sidekiq untuk pekerjaan yang tertunda dan gunakan penyimpanan cache.

Sangat penting untuk menyetel grup keamanan yang benar untuk kluster redis ElastiCache Anda, grup keamanan ini harus tersedia untuk tumpukan OpsWorks Anda.

Pertama buat cluster Redis ElastiCache Anda. Kemudian masuk ke konsol AWS Anda, klik "EC2", lalu klik "Grup Keamanan" (di bawah NETWORK &SECURITY). Cari grup keamanan menggunakan id grup keamanan yang terkait dengan cluster elasticache Anda.

Sekarang tetapkan aturan Inbound di mana sumbernya adalah grup keamanan opsworks yang Anda miliki di dalam opsworks.

Di EC2 Anda -> Grup Keamanan:

Di OpsWorks -> Layers -> Rails App Server Security:

Pada akhirnya, dalam proyek Rails Anda, edit config/production.rb . Anda file (dengan asumsi Anda bekerja untuk env produksi) dan tambahkan baris seperti ini untuk mengatur penyimpanan cache Anda:

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

Kemudian untuk membuat Sidekiq menggunakan Redis, Anda memerlukan config/sidekiq.rb file seperti ini:

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

Anda dapat mengambil URL dan port redis di dalam AWS Console ElastiCache Dashboard, dengan mengklik kolom Nodes yang terkait dengan cluster Anda.

Anda hanya memerlukan resep untuk Memulai dan Menghentikan sidekiq, kecuali jika Anda ingin memulainya secara manual di dalam mesin Anda melalui ssh (tentu saja tidak baik untuk produksi).

Dalam hal ini Anda harus menambahkan resep Kustom ke tumpukan OpsWorks Anda, untuk acara Deploy. Resep ini akan menjadi seperti ini:

# 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

Semoga membantu!




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mengakses variabel di luar fungsi redis pipelining di Laravel

  2. Apa perbedaan antara metode HSET dan HMSET dalam database redis?

  3. Jendela tumpukan tidak menunjukkan keluaran saat men-debug skrip Redis Lua dengan ZeroBrane

  4. Arsitektur untuk cache Redis &Mongo untuk ketekunan

  5. Bagaimana cara menjaga has_many :through hubungan saat membuat serial ke JSON dan kembali ke Rails 4.0.3?