当前位置: 首页 > 知识库问答 >
问题:

Ruby -没有符号到整数的隐式转换

金何平
2023-03-14

我试图创建AWS安全组,但我得到的错误没有隐式转换的符号到整数ec2.create_security_group(GroupName=sg_name,VpcId=vpc_id)

我在遵循这个文档。知道如何解决这个错误吗?

begin
 
  ec2 = get_aws_client
  prov = $evm.root['miq_provision_request'] || \
      $evm.root['miq_provision'] || \
      $evm.root['miq_provision_request_template']
  vpc_id = prov.get_option(:dialog_cloud_network).to_s.strip 
  #prov.get_option(:dialog_vm_name).to_s.strip 
  sg_name = 'test_sg_manageiq'
  
  #ec2.create_security_group({vpcid: vpc_id, groupname: sg_name})

  ec2.create_security_group(GroupName=sg_name, VpcId=vpc_id)

rescue => err
  log(:error, "[#{err}]\n#{err.backtrace.join("\n")}")
  exit MIQ_ABORT
end

错误:

[----] I, [2022-02-15T16:17:26.360528 #326:2ad4a042a1e0]  INFO -- automation: Q-task_id([r49_miq_provision_183]) <AEMethod sg_preprovision> Found provider: AWS via default method
[----] E, [2022-02-15T16:17:26.660450 #326:2ad4a042a1e0] ERROR -- automation: Q-task_id([r49_miq_provision_183]) <AEMethod sg_preprovision> [no implicit conversion of Symbol into Integer]
/ManageIQ_Custom/Cloud/VM/Provisioning/StateMachines/Methods/SG_Preprovision:143:in `<main>'
[----] I, [2022-02-15T16:17:26.707133 #326:2ad4959cb960]  INFO -- automation: Q-task_id([r49_miq_provision_183]) <AEMethod [/ManageIQ_Custom/Cloud/VM/Provisioning/StateMachines/Methods/SG_Preprovision]> Ending
[----] E, [2022-02-15T16:17:26.707734 #326:2ad4959cb960] ERROR -- automation: Q-task_id([r49_miq_provision_183]) State=<PreProvision> running  raised exception: <Method exited with rc=MIQ_ABORT>
[----] W, [2022-02-15T16:17:26.707927 #326:2ad4959cb960]  WARN -- automation: Q-task_id([r49_miq_provision_183]) Error in State=[PreProvision]

共有1个答案

程和畅
2023-03-14

“没有符号到整数的隐式转换”错误几乎总是意味着你有一个数组或字符串,而你期望的是一个散列。在您的案例中,可疑代码是:

#ec2.create_security_group({vpcid: vpc_id, groupname: sg_name})
ec2.create_security_group(GroupName=sg_name, VpcId=vpc_id)

对我来说你使用的create_security_group调用看起来更像Python而不是Ruby,相当于:

GroupName = sg_name
VpcId = vpc_id
ec2.create_security_group(GroupName, VpcId)

因此,您将一个字符串(< code>sg_name)传递给一个需要参数散列的方法:

< code > # create _ security _ group(params = { })Types::CreateSecurityGroupResult

创建安全组
[…]

然后,< code > create _ security _ group 会尝试将< code>sg_name视为其预期的< code>params哈希,从而触发异常。

我认为您希望使用注释掉的代码并修复键以包含下划线,如文档所示:

ec2.create_security_group(vpc_id: vpc_id, group_name: sg_name)
 类似资料:
  • 我尝试使用改造2发布到rails来过滤来自params[: filter]的一些数据是: 所以我想用一个简单的参数[:filter][:id]获取id,但它,感谢您的帮助,如果它看起来是一个简单的问题,很抱歉

  • 我正在尝试将文件导入Excel,但是当我尝试使用相关数据创建记录时,它会向我显示以下错误: 在此行中: 这是我用来导入的列表控制器和方法: 我的方法导入到列表控制器中: 这是我的“deta”控制器:

  • 我在尝试更改哈希值时遇到了一个奇怪的问题。我有以下设置: 当我执行此代码时,我得到:“TypeError:没有将符号隐式转换为整数”,尽管 item[:company_name] 的输出是预期的字符串。我做错了什么?

  • 我正在接收 无符号到整数的隐式转换 使用以下代码: 但是当我将方法的 路由到< code > Admin::questions controller 的< code>create方法,为什么它不起作用?我是rails和命名空间的新手,所以我可能忽略了一些显而易见的东西。 编辑: 问题控制器的命名空间在admin下。

  • 搞砸 使用的代码 我无法获得以下输出: 错误信息: 类型错误没有将符号隐式转换为整数 在多条记录的情况下,它可以正常工作 使用的代码

  • 尝试将 URL 中包含的参数转换为整数,以便在控制器中对其进行操作 - URL 的格式类似于 http://localhost:3000/charges?data=149 charges_controller.rb 如下所示: 我在better_errors屏幕中看到的参数已经检测到“数据”量: 在live shell中,如果我执行params[: data],则会出现更好的错误。to_i它返回1