如何使用Chef JSON设置redis和sidekiq配置

时间:2015-05-05 11:12:02

标签: redis chef aws-opsworks

我正在使用AWS OpsWorks与Redis和Sidekiq一起使用Rails应用程序,并希望执行以下操作:

  • 覆盖maxmemory配置for redis
  • 只运行Redis&选定的EC2实例上的Sidekiq

我当前的JSON配置只有database.yml覆盖:

{
  "deploy": {
    "appname": {
      "database": {
        "username": "user",
        "password": "password",
        "database": "db_production",
        "host": "db.host.com",
        "adapter": "mysql2"
      }
    }
  }
}

1 个答案:

答案 0 :(得分:1)

  

覆盖redis的maxmemory配置

看看您选择的Redis食谱是否为您提供了设置/提供自定义配置值的属性。我知道主redisio允许你设置配置值,就像我在堆栈上一样(我设置了磁盘缓存的路径,我相信)

  

只运行Redis&选定的EC2实例上的Sidekiq

这部分很简单:为Redis(或Redis / Sidekiq)创建一个Layer并向该层添加一个实例。

现在,由于Redis与Rails服务器位于不同的实例上,因此您不必知道Redis服务器的IP地址是什么。特别是因为你可能想要使用内部EC2 IP地址与盒子的公共IP地址(使用内部地址意味着你已经在默认防火墙内)。

Sooo ...您可能需要做的就是为您的应用编写自定义食谱,如果您还没有。在attributes/default.rb中写下这样的代码:

redis_instance_details = nil
redis_stack_name = "REDIS"

redis_instance_name, redis_instance_details = node["opsworks"]["layers"][redis_stack_name]["instances"].first

redis_server_dns = "127.0.0.1"
if redis_instance_details
  redis_server_dns = redis_instance_details["private_dns_name"]
end

然后在属性文件中将redis配置设置为redis_hostname(可能使用它来设置:

default[:deploy][appname][:environment_variables][:REDIS_URL] = "redis://#{redis_server_dns}:#{redis_port_number}"

希望这有帮助!