尽管安装了Rails,仍未找到"rails"命令

Tro*_*lli 5 ruby command ruby-on-rails

我从源代码编译并安装了Ruby 2.2到/ usr/local/bin/ruby​​和/ usr/local/bin/gem.(由于项目限制,我不能使用RVM,这是一个很长的故事.)

我在/ usr/bin中为这两个创建了符号链接.

我根本跑了:

gem install rails
Run Code Online (Sandbox Code Playgroud)

得到了:

Successfully installed rails-4.2.1
Parsing documentation for rails-4.2.1
Done installing documentation for rails after 0 seconds
1 gem installed
Run Code Online (Sandbox Code Playgroud)

当我尝试运行Rails时,我得到:

bash: rails: command not found
Run Code Online (Sandbox Code Playgroud)

which rails 还返回:

/usr/bin/which: no rails in (/sbin/:/bin:/usr/sbin:/usr/bin:/usr/local/bin)
Run Code Online (Sandbox Code Playgroud)

我的宝石列表是:

*** LOCAL GEMS ***

actionmailer (4.2.1)
actionpack (4.2.1)
actionview (4.2.1)
activejob (4.2.1)
activemodel (4.2.1)
activerecord (4.2.1)
activesupport (4.2.1)
arel (6.0.0)
bigdecimal (1.2.6)
builder (3.2.2)
bundler (1.9.4)
erubis (2.7.0)
globalid (0.3.5)
i18n (0.7.0)
io-console (0.4.3)
json (1.8.1)
loofah (2.0.1)
mail (2.6.3)
mime-types (2.5)
mini_portile (0.6.2)
minitest (5.4.3)
nokogiri (1.6.6.2)
power_assert (0.2.2)
psych (2.0.8)
rack (1.6.0)
rack-test (0.6.3)
rails (4.2.1)
rails-deprecated_sanitizer (1.0.3)
rails-dom-testing (1.0.6)
rails-html-sanitizer (1.0.2)
railties (4.2.1)
rake (10.4.2)
rdoc (4.2.0)
sprockets (3.0.3)
sprockets-rails (2.2.4)
test-unit (3.0.8)
thor (0.19.1)
thread_safe (0.3.5)
tzinfo (1.2.2)
Run Code Online (Sandbox Code Playgroud)

另外,我的gems环境如下所示:

RubyGems Environment:
  - RUBYGEMS VERSION: 2.4.5
  - RUBY VERSION: 2.2.2 (2015-04-13 patchlevel 95) [x86_64-linux]
  - INSTALLATION DIRECTORY: /usr/local/lib/ruby/gems/2.2.0
  - RUBY EXECUTABLE: /usr/local/bin/ruby
  - EXECUTABLE DIRECTORY: /usr/local/bin
  - SPEC CACHE DIRECTORY: /root/.gem/specs
  - SYSTEM CONFIGURATION DIRECTORY: /usr/local/etc
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86_64-linux
  - GEM PATHS:
     - /usr/local/lib/ruby/gems/2.2.0
     - /root/.gem/ruby/2.2.0
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - https://rubygems.org/
  - SHELL PATH:
     - /sbin/
     - /bin
     - /usr/sbin
     - /usr/bin
     - /usr/local/bin
Run Code Online (Sandbox Code Playgroud)

the*_*Man 2

...作为root我跑了...

root 认为 Ruby 走的是哪条路?可能性非常大,它认为 Ruby 位于 /usr/bin 中,而不是/usr/local/bin 中的可能性非常大,因为该路径 /usr/local/bin 可能不在 root 的路径中。

您可以/usr/local/bin:暂时添加到 root 的路径之前,也可以使用gem/usr/local/bin 中的 ,它会知道将该版本的 Ruby 的 gem 文件放在哪里。我会尝试:

sudo /usr/local/bin/gem install rails
Run Code Online (Sandbox Code Playgroud)

它应该为新版本的 Ruby 安装 Rails。


  • 外壳路径:
    • /sbin/
    • /垃圾桶
    • /usr/sbin
    • /usr/bin
    • /usr/local/bin

请注意搜索路径的顺序。/usr/bin是之前/usr/local/bin。目的/usr/local/bin是提供一个位置来存储用户范围内本地安装的可执行文件。通常,当您想要覆盖默认/usr/bin可执行文件的行为时(例如,如果您希望在计算机上运行新的 Ruby),您可以在此处安装可执行文件的修改版本。

而不是您正在使用的内容,您/usr/local/bin应该位于/usr/binPATH 定义之前。这肯定会导致不同的搜索行为,特别是对于which,但不能保证解决您所看到的问题。

gem install rails会在 /usr/bin 中找到gem,而不是在 /usr/local/bin 中,并将 Rails 安装到同一个 Ruby 路径中。

which搜索路径,因此检查rails/usr/bin 中是否有命令:

ls /usr/bin/rails
Run Code Online (Sandbox Code Playgroud)

如果存在,您可能需要重建用于快速搜索的哈希。我想应该是这样,rehash rails但我的记忆已经模糊了。