This issue doesn't happen with ruby 2.7.2 (also from Windows Installer).
uru 3.2.2
ruby --version
ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x64-mingw-ucrt]
irb
Dir.glob("*/**/*")
# => <internal:dir>:ln:in `glob': Filename too long - frontends/webapp-frontend/src/features/featureMangement/features/featureTypes/components/FeatureTypeDraggableField/components/AreaConfiguration/components/AreaFilters/components/AreaFiltersDrawer/components/AreaByLocationPreview/hooks (Errno::ENAMETOOLONG)
- None of the ruby installer repos (old or new) has any reported issue on this matter.
Windows has a registry entry, under the path Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem, called LongPathsEnabled to enabling support for file paths over 260 characters, that defaults to 0 , but that can be changed to 1. There is a very complete article in Microsoft Docs: Maximum Path Length Limitation.
There have been a couple of bugs reported in ruby-core:
And one fix has been merged: [Win32] long path name support [Bug #12551]#4505 (very insightful article of the author of the fix).
Based on all the above, the only thing required is to have this entry in the windows application manifest:
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings xmlns:ws2="http://schemas.microsoft.com/SMI/2016/WindowsSettings">
<ws2:longPathAware>true</ws2:longPathAware>
</windowsSettings>
</application>
By using the Manifest Tool, it is possible to directly embed the manifest using a command line similar to the following as a post-build step (article: How to embed a manifest inside a C/C++ application)...
mt.exe -manifest MyApp.exe.manifest -outputresource:MyApp.exe;1
And it is also possible to extract the manifest from an executable.
Obtaining the Manifest Tool via Windows SDK:
- Visiting SDK Downloads
- After using one of the installers.
Extracting the manifest:
mkdir c:\ruby\tmp
cp c:\ruby\Ruby32-x64\bin\ruby.exe c:\ruby\tmp\ruby.exe
cd "C:\Program Files (x86)\Windows Kits\10\bin\10.0.28000.0\x64"
.\mt.exe "-inputresource:c:\ruby\tmp\ruby.exe;#1" -out:c:\ruby\tmp\ruby.exe.manifest
Manifest of the ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x64-mingw-ucrt]:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker"/>
</requestedPrivileges>
</security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
</application>
</compatibility>
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings xmlns:ws2="http://schemas.microsoft.com/SMI/2016/WindowsSettings">
<ws2:longPathAware>true</ws2:longPathAware>
</windowsSettings>
</application>
<dependency>
<dependentAssembly>
<assemblyIdentity version="1.0.0.0" type="win32" name="ruby_builtin_dlls"/>
</dependentAssembly>
</dependency>
<file name="x64-ucrt-ruby320.dll"/>
</assembly>
Well, here I am completely lost. The manifest does contain the ws2:longPathAware entry set to true. So I am not sure what is missing here.
reg query HKLM\SYSTEM\CurrentControlSet\Control\FileSystem /v LongPathsEnabled
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem
LongPathsEnabled REG_DWORD 0x1
Can someone please share any solution, hint to other problems, etc.?
Should I just try to install the ruby 3.3.X or 3.4.X versions?
This issue doesn't happen with
ruby 2.7.2(also from Windows Installer).x64Windows has a registry entry, under the path
Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem, calledLongPathsEnabledto enabling support for file paths over 260 characters, that defaults to0, but that can be changed to1. There is a very complete article in Microsoft Docs: Maximum Path Length Limitation.There have been a couple of bugs reported in ruby-core:
And one fix has been merged: [Win32] long path name support [Bug #12551]#4505 (very insightful article of the author of the fix).
Based on all the above, the only thing required is to have this entry in the windows application manifest:
By using the Manifest Tool, it is possible to directly embed the manifest using a command line similar to the following as a post-build step (article: How to embed a manifest inside a C/C++ application)...
And it is also possible to extract the manifest from an executable.
Obtaining the Manifest Tool via Windows SDK:
Extracting the manifest:
Manifest of the
ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x64-mingw-ucrt]:Well, here I am completely lost. The manifest does contain the
ws2:longPathAwareentry set totrue. So I am not sure what is missing here.Can someone please share any solution, hint to other problems, etc.?
Should I just try to install the ruby
3.3.Xor3.4.Xversions?