【问题标题】:env: ruby\r: No such file or directoryenv: ruby​​\r: 没有这样的文件或目录
【发布时间】:2015-03-16 09:54:09
【问题描述】:

我有 Rails 项目。当我尝试运行任何 rake 任务或 rails 服务器时,它给了我这个错误

env: ruby​​\r: 没有这样的文件或目录

有人可以帮我吗?

【问题讨论】:

    标签: ruby-on-rails ruby rake


    【解决方案1】:

    如果您在 Unix / Mac 上工作,那么此错误是因为您的行尾不正确。

    这是使用dos2unix 的解决方案;您可能需要在系统上安装此程序。如果apt可用,则可以使用sudo apt install dos2unix

      1. 正确设置行尾,并让 git 管理它如何处理它们:
    git config --global core.autocrlf input
    
      1. 在您的目录中,您将通过运行以下命令来转换所有文件:
    find ./ -type f -exec dos2unix {} \;
    

    这将循环浏览您的所有文件并进行转换。并解决问题。添加您的更改。提交它们,你应该很高兴。

    【讨论】:

    • 对于那些遇到“发现:‘dos2unix’:没有这样的文件或目录”错误的人:sudo apt install dos2unix
    • 请注意,find 命令可能过多……这一点是有争议的;这可能很好,但在某些情况下可能有点过分了。另一种可能的路线(对于此答案中的第 2 步)是 git rm -r --cached .,然后是 git reset --hard HEAD... 这可能更快(如果没有别的,它不会在 .git 管家目录中的文件上运行 dos2unix!)。 .. 这也有潜在的问题(不过,如果你从“干净”的结账处运行,可能会很好),但我想我至少会提到它。
    • 对我来说在 Debian 上使用就足够了:sudo dos2unix file.txt
    【解决方案2】:

    您可能已经编辑了 ./bin/rake 文件并在第一行末尾添加了 \r:

    #!/usr/bin/env ruby
    begin
      load File.expand_path("../spring", __FILE__)
    rescue LoadError
    end
    require_relative '../config/boot'
    require 'rake'
    Rake.application.run
    

    确保在“ruby”之后只有换行符。

    【讨论】:

    • 第一行末尾没有\r(
    • 也许不是这个文件,但问题是你试图通过 /usr/bin/env 运行“ruby\r”脚本。您必须检查所有具有该指令的文件:#!/usr/bin/env ruby​​,可以是 ./bin 目录中的其他文件
    • 问题出在 GIT 中。我需要设置 core.autocrlf = input。
    • \r 在您的文字处理器中通常是不可见的
    • @Karol:请停止滥用冒犯性标志。
    【解决方案3】:

    感谢上面的 cmets,我解决了我的服务器问题,该问题是由于克隆我小组的 github rails 应用程序并导致 localhost:3000 失败而引起的。我只是在我的全栈应用程序的后端工作:ruby(-v 2.7.1)/rails(-v 6.0.3.4)。而这2个人的cmets解决了我的错误:

    “对于那些遇到“发现:‘dos2unix’:没有这样的文件或目录”错误的人:sudo apt install dos2unix” – RealMan 2017 年 7 月 26 日 14:59

    “请注意,find 命令可能过多......这一点是有争议的;它可能很好,但在某些情况下可能会过度杀伤。另一个可能的路线(对于此答案中的第 2 步)是git rm -r --cached . 其次是git reset --hard HEAD... 这可能更快(如果没有别的,它不会在.git housekeeping 目录中的文件上运行dos2unix!)...这也有潜在的陷阱(如果你可能会很好'虽然是从“干净”的结帐中运行的),但我认为我至少会提到它。” – 林德斯 2019 年 7 月 13 日 0:42

    【讨论】:

      【解决方案4】:

      我一直收到这个错误,终于想出了如何解决它。

      1. 我确保我的 bin 文件夹中的文件的所有权限都是 可执行。

      在您当前的存储库中运行 ls -lha。您希望每个文件的末尾都有一个x,就像这样

      -rwxr-xr-x

      要实现这一点,您需要为 bin 文件夹中的每个文件运行 chmod +x <file_name_here>,例如 chmod +x railschmod +x bundle 等。

      现在,当您运行 ls -lha 时,您应该会看到它们的末尾都有一个 x。

      1. 接下来,无论是在 SublimeText、Atom 还是您拥有的任何文本编辑器中,您都需要检查您没有使用 Windows 行尾。 \r 字符是 Windows 使用的。 Unix 只是使用\n 换行。

      我使用 Atom,所以我去了插件部分(Mac 上的 Cmd + ,),然后在 Packages 部分搜索 line-ending-selector,然后转到行尾选择器设置。将默认值更改为“LF”。

      您会发现,在文件的底部,Atom 会告诉您文件使用的行尾类型,Windows 为CRLF,Unix/Mac 为LF。您希望所有文件都使用“LF”。

      因此,在您的终端中,通过运行 atom ./bin/filename(例如 atom ./bin/rake)打开 Atom 中 bin 文件夹中的每个文件。

      在底部您会看到“CRLF”或“LF”。如果您看到“CRLF”,请单击它,然后在 Atom 顶部,您可以选择“LF”。

      Cmd + s 保存。

      对每个人都这样做。您基本上是在告诉您的文件去除所有 Windows 行尾并改用 Unix 行尾。

      编辑完所有文件后,您应该能够运行 rake 或 rails 命令。

      注意:Sublime Text 和 Text Mate 应该与 Atom 的 line-ending-selector 等效。

      【讨论】:

        【解决方案5】:

        对于 macOS 用户

        第 1 步:HOMEBREW_NO_AUTO_UPDATE=1 brew install dos2unix
        第 2 步:git config --global core.autocrlf input
        第 3 步:find ./ -type f -exec dos2unix {} \;(在您尝试运行任务的 repo 中)

        git addgit commit
        你可以走了!

        【讨论】:

          【解决方案6】:

          我在使用 WSL 2 的 Windows 终端上遇到了同样的问题!我关注了一个帖子,建议安装 dos2unix 依赖项:sudo apt install dos2unix(使用 apt 包管理器)并运行其他两个命令:

          • git config --global core.autocrlf input(正确设置行尾,并让 git 管理如何处理它们)

          • find ./ -type f -exec dos2unix {} \;(在您的目录中您将转换所有文件)

          git 会识别一些更改,但您不需要提交它。我刚刚做了一个git restore .,删除节点依赖rm -rf node_modules然后重新下载yarn install

          【讨论】:

            猜你喜欢
            • 2013-10-25
            • 2016-02-20
            • 2022-01-19
            • 2013-03-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-03-16
            相关资源
            最近更新 更多