Невозможно скопировать файлы.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 файлы в том же списке выполнения.
Удачи.