我正在尝试使用雾来配置ec2实例,这是我正在使用的代码:
compute = Fog::Compute.new provider: 'AWS',
region: 'us-east-1', aws_access_key_id: ACCESS_KEY,
aws_secret_access_key: SECRET_ACCESS_KEY
options = {
image_id: 'ami-xxxxxx',
flavor_id: 'm1.small',
#custom security group created in AWS Account with open ports
groups: ['myGroup'],
private_key_path: '~/.ssh/id_rsa',
public_key_path: '~/.ssh/id_rsa.pub',
username: 'ec2-user',
user_data: File.read(Rails.root.join('public', 'somefile.zip'))
}
compute.servers.bootstrap options
什么时候,我跑这个。我收到以下错误:
Fog::JSON::EncodeError: string contains null byte
from /home/gaurish/.rvm/gems/ruby-2.0.0-p247/gems/multi_json-1.8.2/lib/multi_json/adapters/oj.rb:20:in `dump'
正如您可能注意到的,上面。我正在为user_data
选项提供ZIP文件。这就是我认为问题的发生。我的猜测是,zip文件或将其编码为base64会以某种方式添加一个空字节("\0"
),因为Oj
无法将其编码为JSON格式。
现在,
使用的版本:
答案 0 :(得分:2)
我已经解决了这个问题。这是如何:
file = File.open(path, 'rb') #path => path to zip file
contents = file.read
file.close
user_data = Base64.encode64 contents
现在,这个user_data
可以安全地传递到options[:user_data]
哈希,而不会出现空字节错误。这个问题正在跟踪中: