Redis
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> Redis

Làm cách nào để chạy Redis trên Amazon OpsWorks cho ứng dụng Rails?

Một cách khả thi là tạo một "cụm ElastiCache" trên AWS và yêu cầu Rails sử dụng nó.

Tôi có ứng dụng rails của mình đang chạy với ngăn xếp OpsWorks và tôi sử dụng redis vì hai lý do khác nhau:sử dụng Sidekiq cho công việc bị trì hoãn và sử dụng kho lưu trữ bộ nhớ cache.

Việc đặt đúng nhóm bảo mật là rất quan trọng cho cụm ElastiCache redis của bạn, nhóm bảo mật này phải có sẵn cho ngăn xếp OpsWorks của bạn.

Trước tiên, hãy tạo cụm Redis ElastiCache của bạn, sau đó vào bảng điều khiển AWS, nhấp vào "EC2", sau đó nhấp vào "Nhóm bảo mật" (trong MẠNG &BẢO MẬT). Tìm kiếm nhóm bảo mật bằng cách sử dụng id nhóm bảo mật được liên kết với cụm bộ đệm đàn hồi của bạn.

Bây giờ, hãy đặt quy tắc Inbound trong đó nguồn là nhóm bảo mật opsworks mà bạn có bên trong opsworks.

Trong EC2 -> Nhóm bảo mật của bạn:

Trong OpsWorks -> Lớp -> Rails App Server Security:

Cuối cùng, trong dự án Rails của bạn, hãy chỉnh sửa config / production.rb của bạn tệp (giả sử rằng bạn đang làm việc cho production env) và thêm một dòng như thế này để đặt bộ nhớ cache của bạn:

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

Sau đó, để Sidekiq sử dụng Redis, bạn cần có config / sidekiq.rb tệp như thế này:

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

Bạn có thể truy xuất URL redis và cổng bên trong Bảng điều khiển AWS Bảng điều khiển ElastiCache bằng cách nhấp vào bên dưới cột Nút liên quan đến cụm của bạn.

Bạn chỉ cần một công thức để Bắt đầu và Dừng sidekiq, trừ khi bạn muốn khởi động nó theo cách thủ công bên trong máy của mình thông qua ssh (tất nhiên là không tốt cho sản xuất).

Trong trường hợp này, bạn phải thêm công thức Tùy chỉnh vào ngăn xếp OpsWorks của mình cho sự kiện Triển khai. Công thức này sẽ giống như sau:

# 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

Hy vọng nó sẽ hữu ích!




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Thiết kế một ứng dụng với Redis như một kho lưu trữ dữ liệu. Gì? Tại sao?

  2. Cách tạo kết nối Redis với Master và Slave

  3. tham số maxmemory trong redis.conf

  4. Chúng ta có thể tham gia Redis không?

  5. Làm thế nào để tạm dừng hoặc tiếp tục công việc cần tây?