簡體   English   中英

“$ bin / rails”中的“bin”是什么意思?

[英]What means 'bin' in '$ bin/rails?'

我正在嘗試按照“入門引擎”Rails指南的教程進行操作,並發現:

$ bin/rails plugin new blorgh --mountable

當我在終端上輸入時,我得到:

bash: bin/rails: No such file or directory

當我嘗試$ rails它可以正常工作。

我一直在使用命令行幾個月,還有Rails。 我知道$符號,但我對此之后“bin”的含義感到困惑。 我習慣在$之后輸入“Rails”,但本教程說使用“bin”...

bin/是什么意思?

TL;博士

運行bundle install --binstubs ,它會工作。 你只需要做一次,Bundler會記住你要求它(對於那個項目)。

更長的答案

當您使用bundle --binstubs安裝bundle時,Bundler會將所有特定於bundle --binstubs安裝到bin/子目錄(相對於Gemfile),而不是將它們放入gemset的全局binstub路徑中。

您通常會這樣做:

  1. 確保您正在運行的rails binstub是Gemfile中的那個(與之后安裝到gemset中的不同版本相反,與Bundler分開),以及
  2. 改進執行時間(因為它在功能上等同於bundle exec rails除了減去一個子進程調用之外)。

全局binstubs與Bundler binstubs

如果你鍵入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/ version設置了BUNDLE_GEMFILE環境變量,它需要bundler/setup ,這就是告訴Bundler用gem路徑做的事情。 bin/rails腳本具有捆綁器感知功能,並且可以識別您的Gemfile,因此它可以立即為您的環境做好准備。

我通常建議在gemset版本上使用--binstubsbin/x調用。

考慮這種情況:

我有一個使用Rails版本4.0.0的應用程序。 我的目標是將其升級到Rails 4.1.9。 為此,我嘗試逐步升級:首先升級到4.0.13,然后升級到4.1,最后升級到4.1.9。

一切順利。 所有的測試都是使用RSpec進行的。

最后,我嘗試用rails s運行我的服務器。 Booom! Ruby崩潰了。 然后,我使用了bin/rails s 一切都很好。

所以我認為如果你的系統中設置了不同版本的rails,那么使用bin/rails選項會更安全。

PS為了確保我的假設是正確的,我刪除了除4.1.9之外的所有rails版本然后我嘗試用rails s重新運行服務器。 這次沒有崩潰。

希望這澄清一下。

在基於unix的操作系統中通過shell運行可執行文件時,將首先搜索系統路徑。 要查看$PATH所有目錄,請在終端提示符下嘗試:

echo $PATH

rails可執行文件將出現在列出的目錄之一中。

編輯 - 下面的文字是完全錯誤的,道歉

(可選)從rails目錄的根目錄,您可以在bin目錄中運行可執行文件。 要做到這一點,也就是說,為了確保您運行本地可執行文件而不是$PATH可執行文件,您需要一個'。' 在命令之前。 所以,

./bin/rails

bin/rails

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM