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

380
Eric G

Я использую 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 "#\\AppData\\Roaming\\Notepad++\\plugins\\someplugin.dll" do source 'notepadplusplus/plugins/someplugin.dll' action :create_if_missing only_if { ::File.exist?("#/Notepad++/notepad++.exe") } end 

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

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

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

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

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

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

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

0

1 ответ на вопрос

0
Joshua Riojas

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


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

Удачи.

Похожие вопросы