Я использую 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 ответ1

0

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


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

Удачи.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .