“$ bin/rails”中的“bin”是什么意思?
-
26-12-2019 - |
题
我试图按照“引擎入门”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 路径中。
您通常会这样做:
- 确保
rails
您正在运行的 binstub 是 Gemfile 中的版本(而不是稍后安装到您的 gemset 中的与 Bundler 分开的不同版本),并且 - 为了提高执行时间(因为它在功能上相当于
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,因此它可以立即准备好您的环境。
我一般建议使用 --binstubs
和 bin/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