我試圖在Amazon OpsWorks環境中爲緩存目的和Sidekiq設置Redis實例/圖層,但無法使Rails應用程序與Redis進行通信。如何在Amazon OpsWorks上爲Rails應用程序運行Redis?
無論做什麼,我都需要廚師食譜嗎?我試圖在分離的圖層上創建Redis,爲此圖層添加了一個實例,但無法找到使Rails和Redis在彼此之間進行通信的方法。
任何建議如何使它?
謝謝
我試圖在Amazon OpsWorks環境中爲緩存目的和Sidekiq設置Redis實例/圖層,但無法使Rails應用程序與Redis進行通信。如何在Amazon OpsWorks上爲Rails應用程序運行Redis?
無論做什麼,我都需要廚師食譜嗎?我試圖在分離的圖層上創建Redis,爲此圖層添加了一個實例,但無法找到使Rails和Redis在彼此之間進行通信的方法。
任何建議如何使它?
謝謝
一個可能的方式做到這一點是在AWS上創建一個「ElastiCache cluster」,並告訴Rails的使用它。
我有我的rails應用程序與OpsWorks堆棧運行,我使用redis有兩個不同的原因:使用Sidekiq延遲作業並使用緩存存儲。
爲您的redis ElastiCache集羣設置正確的安全組非常重要,此安全組必須可用於您的OpsWorks堆棧。
首先創建您的Redis ElastiCache羣集。然後點擊「EC2」,然後點擊「安全組」 (在NETWORK &安全下)。使用與您的彈性緩存集羣關聯的安全組ID來搜索安全組。
現在設置一個Inbound規則,其中的源代碼是opsworks內部的opsworks安全組。
在OpsWorks - >圖層 - > Rails應用程序服務器安全性:
最後,在你的Rails項目,編輯配置/ production.rb文件(假設你正在爲生產ENV),並添加這樣一行來設置緩存存儲:
config.cache_store = :redis_store, "redis://#{Rails.application.secrets.redis_host}:#{Rails.application.secrets.redis_port}/0/cache", { expires_in: 90.minutes }
然後使Sidekiq使用Redis的,你需要一個配置/ 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
您可以擷取AWS控制檯ElastiCache儀表板內Redis的URL和端口,在相關節點欄點擊你的羣集。
你只需要一個配方來啓動和停止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
希望它能幫助!
謝謝@DiegoD。使用** ElastiCache **還可以擴展嗎? – user984621
@ user984621像RDS一樣的ElastiCache規模。我認爲這是一個不錯的選擇,但當然這取決於你的需求。如果您認爲以某種方式幫助了您,請將我的答案標記爲已接受。 –
請考慮將我的答案標記爲有效答案。謝謝 –