如何在Amazon OpsWorks上运行Redis以获取Rails应用程序?

我正在尝试在Amazon OpsWorks环境中设置Redis实例/图层以用于缓存目的和Sidekiq,但不能使Rails应用程序与Redis通信。

无论如何,我都需要厨师食谱吗? 我试图在一个分离的层上创建Redis,在这个层中添加了一个实例,但找不到相互之间进行Rails和Redis通信的方法。

有什么建议怎么做?

谢谢

一种可行的方法是在AWS上创建“ ElastiCache集群 ”并告诉Rails使用它。

我有一个运行OpsWorks堆栈的rails应用程序,我使用redis有两个不同的原因:使用Sidekiq进行延迟作业并使用缓存存储。

为redis ElastiCache群集设置正确的安全组非常重要,此安全组必须可用于您的OpsWorks堆栈。

首先创建Redis ElastiCache集群。 然后进入您的AWS控制台,单击“EC2”,然后单击“安全组”(在“网络和安全”下)。 使用与弹性缓存集群关联的安全组ID搜索安全组。

现在设置一个入站规则,其中源是opsworks中的opsworks安全组。

在您的EC2 – >安全组中: 在此处输入图像描述

在OpsWorks – >图层 – > Rails App Server Security: 在此处输入图像描述

最后,在你的Rails项目中,编辑你的config / production.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 

您可以在AWS Console ElastiCache仪表板中检索redis URL和端口,单击与您的群集相关的Nodes列。

你只需要一个配方来启动和停止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 

希望能帮助到你!