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