我试图按照“引擎入门”Rails 指南的教程进行操作,并发现了以下内容:

$ bin/rails plugin new blorgh --mountable

当我在终端上输入此内容时,我得到:

bash: bin/rails: No such file or directory

当我尝试时 $ rails 它工作正常。

我已经使用命令行几个月了,还有 Rails。我知道 $ 符号,但我对之后的“bin”的含义感到困惑。我习惯在 $ 之后输入“Rails”,但本教程说使用“bin”...

什么是 bin/ 意思是?

有帮助吗?

解决方案

太长了;博士

跑步 bundle install --binstubs 它会起作用的。您只需执行一次,Bundler 就会记住您要求这样做(针对该项目)。

更长的答案

当您安装捆绑包时 bundle --binstubs, ,Bundler 会将所有特定于捆绑包的 binstub 安装到 bin/ 子目录(相对于 Gemfile),而不是将它们放入 gemset 的全局 binstub 路径中。

您通常会这样做:

  1. 确保 rails 您正在运行的 binstub 是 Gemfile 中的版本(而不是稍后安装到您的 gemset 中的与 Bundler 分开的不同版本),并且
  2. 为了提高执行时间(因为它在功能上相当于 bundle exec rails 除了减去一个子进程调用)。

全局 binstub 与 Bundler binstub

如果您输入 which rails, ,你会得到一条很长的路径,比如 /usr/local/rvm/gems/jruby-1.7.18/bin/rails, ,以及其中的内容: cat `which rails`

#!/usr/bin/env jruby_executable_hooks
#
# This file was generated by RubyGems.
#
# The application 'railties' is installed as part of a gem, and
# this file is here to facilitate running it.
#

require 'rubygems'

version = ">= 0"

if ARGV.first
  str = ARGV.first
  str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding
  if str =~ /\A_(.*)_\z/
    version = $1
    ARGV.shift
  end
end

gem 'railties', version
load Gem.bin_path('railties', 'rails', version)

运行后 bundler --binstubs, , 如果你 cat bin/rails, ,你会得到类似的东西:

#!/usr/bin/env jruby
#
# This file was generated by Bundler.
#
# The application 'rails' is installed as part of a gem, and
# this file is here to facilitate running it.
#

require 'pathname'
ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
  Pathname.new(__FILE__).realpath)

require 'rubygems'
require 'bundler/setup'

load Gem.bin_path('railties', 'rails')

关键的区别在于 bin/ 版本设置 BUNDLE_GEMFILE 环境变量,并且需要 bundler/setup, ,这就是告诉 Bundler 使用 gem 路径来做它的事情。这 bin/rails 脚本可以识别捆绑程序,并且可以识别您的 Gemfile,因此它可以立即准备好您的环境。

我一般建议使用 --binstubsbin/x 对 gemset 版本的调用。

其他提示

考虑这种情况:

我有一个使用 Rails 版本 4.0.0 的应用程序。我的目标是将其升级到 Rails 4.1.9。为此,我尝试逐步升级它:首先升级到 4.0.13,然后升级到 4.1,最后升级到 4.1.9。

一切都很顺利。所有测试均使用 RSpec 通过。

最后,我尝试运行我的服务器 rails s. 。繁荣!鲁比崩溃了。然后,我用了 bin/rails s. 。一切顺利。

所以我认为如果你的系统中设置了不同版本的rails,使用起来会更安全 bin/rails 选项。

附:为了确保我的假设是正确的,我删除了除 4.1.9 之外的所有 Rails 版本,然后尝试使用以下命令重新运行服务器 rails s. 。这次没有崩溃。

希望这能澄清。

当您在基于 UNIX 的操作系统中通过 shell 运行可执行文件时,将首先搜索您的系统路径。要查看您的所有目录 $PATH, ,从终端提示符中尝试以下操作:

echo $PATH

Rails 可执行文件将出现在列出的目录之一中。

编辑 - 下面的文字完全错误,我很抱歉

或者,您可以从 Rails 目录的根目录中运行 bin 目录中的可执行文件。为此,即确保您正在运行本地可执行文件,而不是在您的 $PATH, , 你需要一个 '。'在命令之前。所以,

./bin/rails

不是

bin/rails

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top