0

当我启动我的开发 Rails 服务器时,我首先收到以下消息。据我所知,WSL2 是一个虚拟环境。

我本来希望它现在引用驻留在我的 Windows 主机上的 Java 目录。这可能是我在使用 WSL1 时在项目中遗留下来的东西吗?我将如何安全地纠正这个问题?

/home/daveomcd/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/railties-6.0.3.2/lib/rails/app_loader.rb:53: 
warning: Insecure world writable dir /mnt/c/Program Files (x86)/Common Files/Oracle/Java/javapath 
in PATH, mode 040777
4

2 回答 2

1

在尝试解决 WSL2 的缓慢问题时,我遇到了同样的问题。推荐的解决方案是将文件从挂载的 NTFS 驱动器移动到根 ext4 文件系统(使用\\$wsl\<distroname>),所以我这样做了。

我设置/etc/wsl.conf如下:

# Enable extra metadata options by default
[automount]
enabled = true
root = /mnt/
options = "metadata,umask=0033"
mountFsTab = false
[interop]
enabled = true
appendWindowsPath = true

并跑去rails bundle更新依赖。

还要确保您的文件权限和所有者设置已更新。希望能帮助到你。

于 2021-04-14T09:04:15.917 回答
0

抱歉,我很乐意在做出回答之前发表更多评论,看看我是否走在正确的轨道上。但是,由于这里的信息太多,我将尝试在这里为您提供答案。

虽然它是一个虚拟环境,但默认情况下,WSL 提供了几个“Windows 互操作”功能,允许它:

  1. 自动挂载 Windows 驱动器/mnt/{c,d,...}
  2. 将 Windows 路径附加到 Linux 路径
  3. 在 Linux 中运行 Windows 可执行文件
  4. 与 Linux 共享 Windows 环境变量(尽管默认情况下不会发生这种情况)

我不能确定(自从我使用 Rails 以来已经很久很久了),但它看起来像是在app_loader.rb检查路径中 Java 目录的权限。它可能使用了一些逻辑,例如“检查每个路径条目并在其中查找一个javajava.exe。如果找到,请检查权限”。 或类似的东西。这意味着上面的(2)和(3)可能会混淆它。

您可以使用 看到这一点which java.exe,它可能会返回一个 Windows 路径。或者运行notepad.exe,这将从 Linux/WSL 中启动 Windows 记事本可执行文件(神奇!)。

这些都是非常有用的功能,所以我不想完全禁用它们,但这是找出问题所在的最简单方法。/etc/wsl.conf使用以下内容创建一个:

[interop]
enabled=false
appendWindowsPath=false

退出您的 WSL 实例,然后:

  • (从 PowerShell、CMD 或 Windows 开始)运行wsl --list --verbose以查看您的发行版的名称(最有可能Ubuntu
  • 同样,运行wsl --terminate <distro>以终止该分发。
  • 重新启动您的 WSL 实例
  • 尝试运行/mnt/c/Windows/system32/notepad.exe(假设正常C:\Windows安装)(应该失败,因为互操作被禁用)
  • 尝试which notepad.exe(应该失败,因为不应再将 Windows 路径附加到 Linux 路径)
  • 尝试再次启动您的 Rails 开发服务器 - 可能会工作(可能不会,我很容易对这里的根本原因弄错)

如果它确实有效,那么您可以尝试使用几种侵入性较小的方法来纠正这种情况,而不是完全禁用这些功能:

  • 如果您打算只使用 WSL 进行开发,那么您可以删除 Windows JDK。
  • 或者至少从 Windows 的 PATH 中删除 Windows JDK。
  • 或者,如果你想保持它安装在 Windows 路径中,你可以有一个 shell 启动文件(例如.bashrc),它只在 WSL 中从路径中删除它。我将向您指出这个问题,其中包含多种技术。
  • 或者你可以保留appendWindowsPath=false在你的/etc/wsl.conf,然后在你的启动配置中手动添加你想要的路径。
于 2021-04-14T19:36:32.910 回答