Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Chef JSON设置redis和sidekiq配置_Redis_Chef Infra_Aws Opsworks - Fatal编程技术网

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

如何使用Chef JSON设置redis和sidekiq配置,redis,chef-infra,aws-opsworks,Redis,Chef Infra,Aws Opsworks,我将AWS OpsWorks用于Redis和Sidekiq的Rails应用程序,并希望执行以下操作: 覆盖redis的maxmemory配置 仅在选定的EC2实例上运行Redis&Sidekiq 我当前的JSON配置只有database.yml覆盖: { "deploy": { "appname": { "database": { "username": "user", "password": "password", "

我将AWS OpsWorks用于Redis和Sidekiq的Rails应用程序,并希望执行以下操作:

  • 覆盖redis的
    maxmemory
    配置
  • 仅在选定的EC2实例上运行Redis&Sidekiq
我当前的JSON配置只有database.yml覆盖:

{
  "deploy": {
    "appname": {
      "database": {
        "username": "user",
        "password": "password",
        "database": "db_production",
        "host": "db.host.com",
        "adapter": "mysql2"
      }
    }
  }
}
覆盖redis的maxmemory配置

看看您选择的Redis cookbook是否提供了一个属性来设置/提供自定义配置值。我知道main
redisio
one允许您设置配置值,就像我在堆栈上做的那样(我相信我设置了磁盘缓存的路径)

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

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

现在,因为Redis与Rails服务器位于不同的实例上,所以您不一定知道Redis服务器的IP地址。特别是因为您可能希望使用内部EC2 IP地址,而不是盒子的公共IP地址(使用内部地址意味着您已经在默认防火墙内)

所以。。。你可能需要做的是为你的应用程序编写一本定制的食谱,如果你还没有这样做的话。在
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_主机名(可能使用它来设置:

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

希望这能有所帮助!

你使用什么烹饪书?这些烹饪书使用什么属性?@DracoAter当时使用了一个叉子,我实际上最终使用了Elasticache for Redis和一个自定义的烹饪书来设置连接参数。然后在使用该工具的基础上设置一个Sidekiq worker层。