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?"

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.