'Bin bin/rails'の'bin'とはどういう意味ですか?'
-
26-12-2019 - |
質問
私は"Getting Started with Engines"Railsガイドのチュートリアルに沿ってフォローしようとしていますが、これを見つけました:
$ bin/rails plugin new blorgh --mountable
端末でこれを入力すると、次のようになります:
bash: bin/rails: No such file or directory
私がちょうどしようとすると $ rails
それは正常に動作します。
私は数ヶ月間コマンドラインを使用してきましたが、Railsも使用しています。私はsign記号を知っていますが、その後の"bin"の意味について混乱しています。私は$の直後に"Rails"と入力するのに慣れていますが、このチュートリアルでは"bin"を使用しています。..
何をしますか bin/
どういうこと?
解決
TL; DR
bundle install --binstubs
を実行して動作します。あなたは一度だけやらなければならず、Bundlerはあなたがそれを頼んだことを覚えているでしょう(そのプロジェクトのために)。
長い回答
bundle --binstubs
を使用してバンドルをインストールすると、Bundlerは、それらをGemsetのグローバルBinStubパスに入れるのではなく、Bundler固有のBinStubsをbin/
サブディレクトリに(GemFileを基準にして)インストールします。
通常これを行います。
- 実行している
rails
BinStubがGemFileの1つ(後で、Bundlerとは別の異なるバージョンとは対照的に)、および - 実行時間を向上させる(マイナス1サブプロセス呼び出しを除く
bundle exec rails
とは機能的に同等)。
グローバルBINSTUBS vsバンダラー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/
のバージョンがBUNDLE_GEMFILE
環境変数を設定し、bundler/setup
を必要とします。 bin/rails
スクリプトはBundler対応であり、あなたのgemfileを認識しているので、あなたの環境をバットからすぐに準備することができます。
一般に、Gemsetバージョンを介した--binstubs
とbin/x
呼び出しを使用することをお勧めします。
他のヒント
このシナリオを検討してください:
私はRailsバージョン4.0.0を使用していたアプリを持っていました。 私の目標はそれをRails 4.1.9にアップグレードすることでした。これを行うには、ステップバイステップのアップグレードを試みました。まず、4.0.13にアップグレードし、その後4.1と最後に4.1.9。
すべてがスムーズに行きました。すべてのテストはRSPECを使用して通過していました。
最後に、私はrails s
でサーバーを実行しようとしました。bo!Rubyがクラッシュしました。
次に、bin/rails s
を使用しました。すべて大丈夫でした。
だから私はあなたのシステムに設置されたレールのバージョンのレールがある場合は、bin/rails
オプションを使用するのが安全です。
p.S。私の仮定が正しいことを確認するには、4.1.9を除くすべてのRailsバージョンを削除してから、rails s
でサーバーを再実行しようとしました。今回はクラッシュしません。
これが明確にしてください。
Unixベースのオペレーティングシステムでシェル経由で実行可能ファイルを実行すると、システムパスが最初に検索されます。すべてのディレクトリを表示するには、次の手順を実行します。 $PATH
, 、端末のプロンプトからこれを試してみてください:
echo $PATH
rails実行可能ファイルは、リストされているディレクトリの1つに存在します。
編集-以下のテキストは完全に間違っています、私の謝罪
必要に応じて、railsディレクトリのルートから、binディレクトリで実行可能ファイルを実行できます。これを行うには、つまり、ローカル実行可能ファイルを実行していることを確認し、ローカル実行可能ファイルにはないことを確認します $PATH
, 、あなたは'を必要とします。'コマンドの前に。だから,
./bin/rails
ない
bin/rails