我发现了很多非常相似的主题,但我只是遗漏了一些东西。 >。<
基本上,我正在尝试使用数据库凭据,主机地址和名称创建名为$db_url
的变量。
当尝试在哈希中提取哈希值时,我收到以下错误:
`[]': can't convert String into Integer (TypeError)
在这一行:
$credentials = $svc_details["credentials"]
以下是上下文:
if (ENV['VCAP_SERVICES'])
$vcap = JSON.parse(ENV['VCAP_SERVICES'])
$svc_details = $vcap["mysql-5.1"]
$credentials = $svc_details["credentials"]
$host = $credentials["host"]
$username = $credentials["username"]
$password = $credentials["password"]
$database = $credentials["name"]
$port = $credentials["port"]
$db_url = "mysql://#{$username}:#{$password}@#{$host}/#{$database}"
end
configure do
Sequel.connect($db_url || ENV['DATABASE_URL'] || 'sqlite://blog.db')
require 'ostruct'
Blog = OpenStruct.new(
:title => 'My Title',
:author => 'My Name',
:url_base => ENV['SITE_URL'],
:admin_password => 'My Password',
:admin_cookie_key => 'cookie_key',
:admin_cookie_value => 'cookie_value',
:disqus_shortname => nil
)
end
修改
以下是我正在努力工作的JSON示例:
{"mysql-5.1":[
{
"name":"mysql-4f700",
"label":"mysql-5.1",
"plan":"free",
"tags":["mysql","mysql-5.1","relational"],
"credentials":{
"name":"d6d665aa69817406d8901cd145e05e3c6",
"hostname":"mysql-node01.us-east-1.aws.af.cm",
"host":"mysql-node01.us-east-1.aws.af.cm",
"port":3306,
"user":"uB7CoL4Hxv9Ny",
"username":"uB7CoL4Hxv9Ny",
"password":"pzAx0iaOp2yKB"
}
},
{
"name":"mysql-f1a13",
"label":"mysql-5.1",
"plan":"free",
"tags":["mysql","mysql-5.1","relational"],
"credentials":{
"name":"db777ab9da32047d99dd6cdae3aafebda",
"hostname":"mysql-node01.us-east-1.aws.af.cm",
"host":"mysql-node01.us-east-1.aws.af.cm",
"port":3306,
"user":"uJHApvZF6JBqT",
"username":"uJHApvZF6JBqT",
"password":"p146KmfkqGYmi"
}
}
]}
我是一个编程新手,所以如果我缺少信息或者不理解某些事情我会道歉。
答案 0 :(得分:0)
can't convert String into Integer (TypeError)
错误是因为$svc_details
是一个数组,即一个条目列表,您使用数字索引选择所需的条目但您尝试使用字符串{{ 1}}作为数组的索引。
如果你看一下你的JSON,你会发现"credentials"
在开始时引用了一个数组(由"mysql-5.1"
括号括起来),其中有2个条目:开始的[]
{1}}和第二个开始{ "name":"mysql-4f700"...
这意味着当你写:
{ "name":"mysql-f1a13"...
然后$svc_details = $vcap["mysql-5.1"]
是一个包含2个元素的数组,因此您无法直接进入$svc_details
如果您知道是否需要第一个或第二个条目,那么您可以使用"credentials"
或$svc_details = $vcap["mysql-5.1"][0]
来选择JSON的相应部分,或者您可以编写一些代码来查找带有特别的名字。