/usr/bin/env: 'ruby': 没有这样的文件或目录 | 不能使用捆绑器,也不能使用 Rails

MrP*_*fio 8 ruby ruby-on-rails bundler

只是一个免责声明,因为我对一般编程还很陌生,并决定采用 ruby​​ 来实现这一目标,但是......

\n\n

我正在关注迈克尔·哈特尔(Michael Hartl)在网上找到的本教程/书籍,但几天前发生了一些事情,我一直在尝试修复它但无济于事,这变得令人难以置信的令人沮丧。

\n\n

当前的问题是标题本身

\n\n
/usr/bin/env: \xe2\x80\x98ruby\xe2\x80\x99: No such file or directory\n
Run Code Online (Sandbox Code Playgroud)\n\n

我无法克服这一点,现在我已经尝试卸载 RVM、Ruby 和 Rails(最后一个给我带来了麻烦)。\n我什至在绝望中将 ubuntu 更新到了 16LTS;我已经更改了 /usr/local/bin 中每个文件的第一行以使其显示

\n\n
#!/usr/bin/env ruby\n
Run Code Online (Sandbox Code Playgroud)\n\n

当我跑步时

\n\n

捆绑安装

\n\n

我得到:

\n\n
/usr/bin/env: \xe2\x80\x98ruby\xe2\x80\x99: No such file or directory\n
Run Code Online (Sandbox Code Playgroud)\n\n

哪个轨道返回:

\n\n
/usr/bin/env: \xe2\x80\x98ruby\xe2\x80\x99: No such file or directory\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是当我运行 Rails -v 时我得到:

\n\n
/usr/bin/env: \xe2\x80\x98ruby\xe2\x80\x99: No such file or directory\n
Run Code Online (Sandbox Code Playgroud)\n\n

再次!!!\n 我有 zsh (如果这有什么区别的话)

\n\n
gem uninstall rails\n
Run Code Online (Sandbox Code Playgroud)\n\n

给我:

\n\n
/usr/bin/gem: bad interpreter: /usr/bin/ruby2.3: no such file or directory\n
Run Code Online (Sandbox Code Playgroud)\n\n

我确实尝试过多种解决方案,但没有一个有效,它可能有一个非常简单的解决方案,但正如我之前所说,我是初学者,尽管不断的故障排除必须具有教育意义,但它变得令人难以置信的令人沮丧和厌恶。

\n\n

谢谢你的帮助!

\n

小智 8

我遇到了同样的问题,详细信息如下

\n

Ruby 已安装在系统上

\n

which ruby返回/usr/local/bin/ruby ,但如果尝试从 cron 运行任何脚本,则会抛出错误/usr/bin/env: \xe2\x80\x98ruby\xe2\x80\x99: No such file or directory

\n

一项小小的调查显示 env 正在尝试加载 ruby​​ 二进制形式/usr/bin/ruby,即使/usr/local/bin/它位于$PATHenv 变量中。所以我创建了一个软链接。

\n
ln -s /usr/local/bin/ruby /usr/bin/ruby\n
Run Code Online (Sandbox Code Playgroud)\n

现在脚本也可以在 cron 中运行。

\n

  • 就我而言,它是“sudo ln -s /home/NAME_OF_USER/.rbenv/shims/ruby /usr/bin/ruby”来解决这个问题 (2认同)

Kei*_*ett 0

有时,当我不再相信 rvm 处于正确状态时,我会重新开始并重新安装 rvm。(更精确且不太激烈的修复,例如 @IgorPavlov 的 --auto-dotfiles 修复也可能有效。)以下是有效停用现有 rvm 安装的 3 种方法;前两个删除了 ~/.rvm 目录,其中包含 rvm 的 rubies、gems 等,第三个只是重命名该目录,以便 rvm 不使用它:

1)rvm implode

2)rm -rf ~/.rvm

3)mv ~/.rvm ~/.rvm.bad

这不会撤消对启动文件所做的更改,但这可能没问题。

然后你从头开始重新安装rvm。

然而,我相信你现在有一个更大的问题;你说“我已经更改了 /usr/local/bin 中每个文件的第一行以使其表示

#!/usr/bin/env ruby
Run Code Online (Sandbox Code Playgroud)

这不太好。;) 你能把这些文件改回原来的内容吗?

#!/usr/bin/env ruby行的唯一目的是告诉 shell 该脚本应该由名称为 的路径中找到的命令运行ruby。该env命令及其/usr/bin所在目录与 Ruby 无关。我建议谷歌搜索/usr/bin/env以更好地理解它。

如果您想自动从 /usr/bin 中的文件中删除“shebang”行,您可以运行下面的脚本(但将其复制到 /usr/bin 以外的目录,否则它也会被修改)。您可能需要使用 sudo 运行脚本,因为 /usr/bin 中的文件可能由 root 用户拥有:

#!/usr/bin/env ruby

# Removes #!/usr/bin/env ruby from files in /usr/bin.

require 'fileutils'

DIR = ARGV.first || '/usr/bin' #location can be overridden on cmd line

files = Dir[DIR + '/*'].select { |f| File.file?(f) }

files.each do |file|
  lines = File.readlines(file)
  needs_modifying = /^#!\/usr\/bin\/env\s+ruby$/ === lines.first
  puts (needs_modifying ? 'Modifying     ' : 'Not modifying ') + "#{file}."
  if needs_modifying
    FileUtils.cp(file, file + '.sav')
    File.write(file, lines[1..-1].join("\n"))
  end
end
Run Code Online (Sandbox Code Playgroud)