【发布时间】:2015-03-16 09:54:09
【问题描述】:
我有 Rails 项目。当我尝试运行任何 rake 任务或 rails 服务器时,它给了我这个错误
env: ruby\r: 没有这样的文件或目录
有人可以帮我吗?
【问题讨论】:
标签: ruby-on-rails ruby rake
我有 Rails 项目。当我尝试运行任何 rake 任务或 rails 服务器时,它给了我这个错误
env: ruby\r: 没有这样的文件或目录
有人可以帮我吗?
【问题讨论】:
标签: ruby-on-rails ruby rake
如果您在 Unix / Mac 上工作,那么此错误是因为您的行尾不正确。
这是使用dos2unix 的解决方案;您可能需要在系统上安装此程序。如果apt可用,则可以使用sudo apt install dos2unix。
git config --global core.autocrlf input
find ./ -type f -exec dos2unix {} \;
这将循环浏览您的所有文件并进行转换。并解决问题。添加您的更改。提交它们,你应该很高兴。
【讨论】:
git rm -r --cached .,然后是 git reset --hard HEAD... 这可能更快(如果没有别的,它不会在 .git 管家目录中的文件上运行 dos2unix!)。 .. 这也有潜在的问题(不过,如果你从“干净”的结账处运行,可能会很好),但我想我至少会提到它。
您可能已经编辑了 ./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 在您的文字处理器中通常是不可见的
感谢上面的 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
【讨论】:
我一直收到这个错误,终于想出了如何解决它。
在您当前的存储库中运行 ls -lha。您希望每个文件的末尾都有一个x,就像这样
-rwxr-xr-x。
要实现这一点,您需要为 bin 文件夹中的每个文件运行 chmod +x <file_name_here>,例如 chmod +x rails、chmod +x bundle 等。
现在,当您运行 ls -lha 时,您应该会看到它们的末尾都有一个 x。
\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 等效。
【讨论】:
对于 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 add 和 git commit
你可以走了!
【讨论】:
我在使用 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。
【讨论】: