我目前通过混合使用TeamCity和Gradle在AWS Opsworks中部署了我的应用程序,但我需要利用deploy钩子来执行一些任务,如Liquibase迁移、符号链接等。
似乎我让Opsworks识别到部署文件夹中有合适的RB文件,但当它运行它们时,我得到了隐式的类型转换错误,因为似乎缺少属性。我已经尝试过手动将它们添加到自定义JSON中,作为一种变通方法,但没有效果。
下面是错误、部署JSON和可能导致问题的参数。我只是想知道如何填写属性值并通过错误。提前谢谢。
TypeError
---------
no implicit conversion of nil into String
Cookbook Trace:
---------------
/var/lib/aws/opsworks/cache.stage2/cookbooks/deploy/definitions/opsworks_deploy.rb:154:in `block (3 levels) in from_file'
Resource Declaration:
---------------------
# In /var/lib/aws/opsworks/cache.stage2/cookbooks/deploy/definitions/opsworks_deploy.rb
65: deploy deploy[:deploy_to] do
66: provider Chef::Provider::Deploy.const_get(deploy[:chef_provider])
67: keep_releases deploy[:keep_releases]
68: repository deploy[:scm][:repository]
69: user deploy[:user]
70: group deploy[:group]
71: revision deploy[:scm][:revision]
72: migrate deploy[:migrate]
73: migration_command deploy[:migrate_command]
74: environment deploy[:environment].to_hash
75: create_dirs_before_symlink( deploy[:create_dirs_before_symlink] )
76: symlink_before_migrate( deploy[:symlink_before_migrate] )
77: action deploy[:action]
78:
79: if deploy[:application_type] == 'rails' && node[:opsworks][:instance][:layers].include?('rails-app')
80: restart_command "sleep #{deploy[:sleep_before_restart]} && #{node[:opsworks][:rails_stack][:restart_command]}"
81: end
82:
The attribute which seems to be generating the issue:
params {:deploy_data=>{"deploy_to"=>"/srv/www/deploy-name", (tons of skipped params) ..., :name=>nil}
Current JSON under which the error is thrown:
{"deploy": {"deploy-name": {"scm": {"user": "accesskey", "password": "secretkey" }}}}
Adjusted JSON in an attempt to resolve:
{"deploy": {"deploy-name": {"scm": {"user": "accesskey", "password": "secretkey" }}, "name": "deploy-name"}}发布于 2014-09-24 22:33:55
事实证明,使用nil进行隐式类型转换是有误导性的,其中编译行上的属性为nil。
问题来自于部署钩子本身(没有迹象表明部署钩子中有坏代码)。一旦解决了这个问题,就没有更多的问题了。
https://stackoverflow.com/questions/26017147
复制相似问题