Невозможно скопировать файлы.DLL, используя cookbook_file в шеф-поваре в Windows

Я использую chef создать установочные файлы для локальной сборки на Windows 10 (например, используя ChefDK с chef-client -z -o win10-setup).

Я хочу использовать cookbook_file или же remote_directory копировать *.dll файлы, которые у меня есть в моей кулинарной книге. Я обнаружил, что если у меня есть.dll в моей кулинарной книге, повар будет жаловаться, не видит файл и выдает Chef::Exceptions::FileNotFound,

Например, если у меня есть [cookbook]\files\default\notepadplusplus\plugins\someplugin.dll

и попробовать:

cookbook_file "#{ENV["USERPROFILE"]}\\AppData\\Roaming\\Notepad++\\plugins\\someplugin.dll" do
  source 'notepadplusplus/plugins/someplugin.dll'
  action :create_if_missing
  only_if { ::File.exist?("#{ENV["PROGRAMFILES"]}/Notepad++/notepad++.exe") }
end

она не будет работать. Однако, если я переименую someplugin.dll в someplugin.dll.plugin а затем измените мой код на следующий, где я обновляю source соответственно

cookbook_file "#{ENV["USERPROFILE"]}\\AppData\\Roaming\\Notepad++\\plugins\\someplugin.dll" do
  source 'notepadplusplus/plugins/someplugin.dll.plugin'
  action :create_if_missing
  only_if { ::File.exist?("#{ENV["PROGRAMFILES"]}/Notepad++/notepad++.exe") }
end

это будет работать.

Тем не менее, это не идеальное решение, потому что я не хочу делать cookbook_file для каждого файла индивидуально, но вместо этого используйте remote_directory скопировать все плагины в папку одновременно.

Я провел тест с remote_directory и обнаружил, что он будет копировать другие файлы, которые не являются *.dll но пропущу *.dll файлы

Я не хочу использовать много сценариев для переименования файлов после копирования, так как это может привести к ошибкам.

Есть ли какая-то особая причина, по которой шеф-повар, кажется, не думает .dll файлы не существуют или как-то настроены на игнорирование этих файлов? Кажется, он фильтрует по фактическому расширению файла, а не по данным в файле, так как вышеприведенный прием переименования работает.

1 ответ

Хотя этот вопрос был задан год назад, я недавно столкнулся с этой проблемой сам и смог найти решение для моей ситуации. Отвечая так, у других, кто наткнулся на этот пост, есть шанс на облегчение.


Проверьте, что ваш chefignore Файл в корне вашей кулинарной книги не содержит записи для DLL-файлов. Если вы создали свою кулинарную книгу с chef generate cookbook [cookbook_name] команда (или, возможно, эквивалентная команда ножа), вы можете ожидать, что ваш chefignore файл, чтобы иметь эту запись.

Пример раздела в chefignore файл, который вы хотите изменить:

## COMPILED ##
##############
a.out
*.o
*.pyc
*.so
*.com
*.class
*.dll
*.exe
*/rdoc/

Вы можете либо прокомментировать оскорбительную строку, либо удалить ее полностью.


В моей конкретной ситуации я хотел использовать только.dll во вложенной кулинарной книге, которая использовалась для тестирования. Моим решением было скопировать chefignore файл в корень моей вложенной поваренной книги, и измените файл там.

Пример пути для внутренней кулинарной книги chefignore файл:

[outer_cookbook]\test\cookbooks\[inner_cookbook]\chefignore

Обратите внимание, что внутренняя кулинарная книга была в моем списке запуска, я не уверен, что происходит, когда у вас есть конфликтующие chefignore файлы в том же списке выполнения.

Удачи.

Другие вопросы по тегам