Я разработал свой кукольный модуль с рубином версии 1.8.7
побежал bundle install
на следующий файл гем и RSpec тесты успешно работали (так же кукольный бег):Почему rspec puppet с ошибкой неопределенного метода при переключении рубиновых версий?
source 'https://rubygems.org'
if puppetversion = ENV['PUPPET_GEM_VERSION']
gem 'puppet', puppetversion, :require => false
else
gem 'puppet', '3.7.5'
end
gem 'metadata-json-lint'
gem 'puppetlabs_spec_helper', '>= 0.1.0'
gem 'puppet-lint', '>= 1.0.0'
gem 'facter', '>= 1.7.0'
gem 'rspec-puppet-facts'
# rspec must be v2 for ruby 1.8.7
if RUBY_VERSION >= '1.8.7' and RUBY_VERSION < '1.9'
gem 'rspec', '~> 2.0'
end
Однако, когда я сделал bundle install
на том же Gemfile
на моем ДИ-сервер, который имеет рубин 1.9.3
я столкнулся следующей Rspec неудачи:
общий Erorr является:
Puppet::Error:
Failed to parse template silex/var/config/settings.json.erb:
Filepath: /var/tmp/silex/spec/fixtures/modules/silex/templates/var/config/settings.json.erb
Line: 4
Detail: undefined method `each_with_index' for "default":String
шаблона, который использует метод each_with_index
:
{
"elasticsearch.settings": {
"connections": [
<% @elastic_hosts.each_with_index do |host,i| -%>
{"host":"<%= host['ip'] %>", "port": <%= host['port'] %> }<%= ',' if i < (@elastic_hosts.size - 1) -%>
<% end -%>
],
"index": "<%= @elastic_index %>"
}
},
"cache.lifetime": <%= @elastic_cache_lifetime %>,
"environment": "dev",
"trusted": [
<% @trusted_hosts.each_with_index do |host,i| -%>
{"host":"<%= host['host'] %>"}<%= ',' if i < (@trusted_hosts.size - 1) -%>
<% end -%>
],
"homepage.settings": {
"hero.count": 20,
"list.count": 20
}
}
Я не в состоянии понять, почему это потерпит неудачу с другой версией рубин? Я также попробовал ruby 2.1.1
с тем же результатом. Результаты успешны только на сервере CI с ruby 1.8.7
(тот же вариант, который я использовал для разработки модуля).
UPDATE 1
Оказывается, что из elastic_hosts
является хэш-картой, и я была строка была неисправной. Я исправил это вместе с trusted_hosts
(еще одна карта хэша), которая привела к большей части прохождения тестов, но ошибка сохраняется.
Примечание: Ошибка не отличается от отмеченных выше общей ошибки.
Я также обновил файл шаблона выше с полным содержимым.
Если вы посмотрите на мой конфигурационный файл спецификации я не уточняя default
в виде строки еще где-нибудь он говорит мне, что это ошибка ..
FIX
Как и предполагалось у моего класса спецификаций init были установлены значения по умолчанию и добавлен поиск hiera для elastic_hosts
и trusted_hosts
.
UPDATE 2
Такое поведение является воспроизводимым между версией 1.8.7
и версией>1.9.3
. Кажется, что есть что-то с тем, как обрабатываются хеши.
'elastic_hosts' на самом деле хэш-карта. Вы правы в том, что он настроен на строку. Я работаю над поиском работы hiera. Скоро обновит ответ. – kaizenCoder