yaml and ip addresses

I was using this code

        url = "http://#{agent_host}:#{agent_port}/home/create_unit?"

And it worked fine in development but for my config.yml, I was specifying localhost for agent_host. However in production, agent_host is an actual ip address and it just wouldn't work. So I had to explicitly put the ip address in production:

        url = "http://xxx.xxx.xx.xxx/home/create_unit?"

This is what that config file had:

agent_development:   host: localhost   port: 3001 agent_production:   host: xxx.xxx.xx.xxx   port: 80 agent_staging:   host: xxx.xxx.xx.xxx   port: 80

where the x's are replaced with actual numeric values that represent ip address.

How does the yaml interpret that ip address? As a decimal value? I'm not sure why when I substitute it into the string interpolation, that it doesn't in production.

Intepreted as String. Look at my irb session (I've put 200.200.200.200 for testing purposes).

Try logging what the string looks like after interpolation.

1.9.3p429 :020 > y = <<EOF 1.9.3p429 :021"> agent_development: 1.9.3p429 :022"> host: localhost 1.9.3p429 :023"> port: 3001 1.9.3p429 :024"> agent_production: 1.9.3p429 :025"> host: 200.200.20.200 1.9.3p429 :026"> port: 80 1.9.3p429 :027"> agent_staging: 1.9.3p429 :028"> host: 200.200.200.200 1.9.3p429 :029"> port: 80 1.9.3p429 :030"> EOF => "agent_development:\n host: localhost\n port: 3001\nagent_production:\n host: 200.200.20.200\n port: 80\nagent_staging:\n host: 200.200.200.200\n port: 80\n"

1.9.3p429 :031 > YAML.load y => {"agent_development"=>{"host"=>"localhost", "port"=>3001}, "agent_production"=>{"host"=>"200.200.20.200", "port"=>80}, "agent_staging"=>{"host"=>"200.200.200.200", "port"=>80}}

Use " for strings if they are ambitious, “127.0.0.1” for example.

I was using this code

        url = "http://#{agent_host}:#{agent_port}/home/create_unit?"

And it worked fine in development but for my config.yml, I was specifying localhost for agent_host. However in production, agent_host is an actual ip address and it just wouldn't work. So I had to explicitly put the ip address in production:

        url = "http://xxx.xxx.xx.xxx/home/create_unit?&quot;

This is what that config file had:

agent_development:   host: localhost   port: 3001 agent_production:   host: xxx.xxx.xx.xxx   port: 80 agent_staging:   host: xxx.xxx.xx.xxx   port: 80

where the x's are replaced with actual numeric values that represent ip address.

How does the yaml interpret that ip address? As a decimal value? I'm not sure why when I substitute it into the string interpolation, that it doesn't in production.

I don't think it's a YAML problem. Show us the code where you go from your YAML configuration to instantiating agent_host and agent_port in the url assignment:

    > url = "http://#{agent_host}:#{agent_port}/home/create_unit?"

BTW, I think you'd might be better off constructing the url via the URI library. It makes things a bit less error prone and can do nice things like check the validity of the url syntax and such.