質問

私は"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を基準にして)インストールします。

通常これを行います。

  1. 実行しているrails BinStubがGemFileの1つ(後で、Bundlerとは別の異なるバージョンとは対照的に)、および
  2. 実行時間を向上させる(マイナス1サブプロセス呼び出しを除くbundle exec railsとは機能的に同等)。
  3. グローバル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バージョンを介した--binstubsbin/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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top