Domanda

Sto cercando di seguire il tutorial "Guida introduttiva con i motori" e ha trovato questo:

$ bin/rails plugin new blorgh --mountable
.

Quando scrivo questo sul mio terminale, ottengo:

bash: bin/rails: No such file or directory
.

Quando provo solo $ rails funziona bene.

Ho usato la riga di comando per un paio di mesi e anche i binari.Conosco il segno $ ma sono confuso sul significato del "bin" dopo quello.Sono abituato a digitare "rotaie" subito dopo $, ma questo tutorial dice che usare "bin" ...

Cosa significa bin/?

È stato utile?

Soluzione

TL; DR

Run bundle install --binstubs e funzionerà. Devi solo farlo una volta e Bundler ricorderai di averlo chiesto (per quel progetto).

risposta più lunga

Quando si installa un pacchetto con bundle --binstubs, Bundler installerà tutti i binstub specifici del bundle nella sottodirectory bin/ (relativamente al gemma), piuttosto che metterli nei percorsi Global Binstub Gemset.

Di solito lo farai a:

    .
  1. Assicurarsi che il Binstub rails in esecuzione sia quello nel tuo Gemfile (al contrario di una versione diversa che è stata installata nel Gemset in seguito, separata da Bundler) e
  2. Migliorare il tempo di esecuzione (dal momento che è funzionalmente equivalente a bundle exec rails tranne il minus una chiamata subprocessa).
  3. Global Binstubs vs Bundler Binstubs

    Se digiti which rails, otterrai un lungo percorso come /usr/local/rvm/gems/jruby-1.7.18/bin/rails e il contenuto di cui: 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)
    
    .

    Dopo aver eseguito bundler --binstubs, se cat bin/rails, riceverai qualcosa come:

    #!/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')
    
    .

    La differenza chiave Esiste che la versione bin/ imposta la variabile di ambiente BUNDLE_GEMFILE e richiede bundler/setup, che è ciò che dice a Bundler di andare a fare la sua cosa con i percorsi della gemma. Lo script bin/rails è consapevole del Bundler, ed è consapevole del tuo Gemfile, quindi può preparare il tuo ambiente proprio fuori dal pipistrello.

    Generalmente consiglio di utilizzare --binstubs e bin/x Invocazioni sulle versioni GEMSET.

Altri suggerimenti

Considera questo scenario:

Ho avuto un'app che stava usando le rotaie versione 4.0.0. Il mio obiettivo era aggiornarlo alle rotaie 4.1.9.Per farlo, ho provato ad aggiornarlo passo dopo passo: prima, aggiornamento a 4.0.13, quindi 4.1 e infine 4.1.9.

Tutto è andato senza intoppi.Tutti i test stavano passando usando RSPEC.

Infine, ho provato a eseguire il mio server con rails s.Archivio!Rubino si è schiantato. Quindi, ho usato bin/rails s.Tutto è andato bene.

Quindi penso che se hai una versione diversa di rotaie configurata nel tuo sistema, è più sicuro utilizzare l'opzione bin/rails.

P.S.Per assicurarsi che la mia ipotesi sia corretta, ho rimosso tutta la versione dei binari tranne 4.1.9 e poi ho provato a rieseguire il server con rails s.Nessun incidente questa volta.

Spero che questo chiarisca.

Quando si esegue un eseguibile tramite Shell in un sistema operativo basato su UNIX, il percorso del sistema verrà cercato prima.Per vedere tutte le directory nel tuo $PATH, provalo dal prompt del terminale:

echo $PATH
.

I binari eseguibili saranno presenti in una delle directory elencate.

Edit - Il testo qui sotto è completamente sbagliato, le mie scuse

Opzionalmente, dalla root della directory dei binari, è possibile eseguire l'eseguibile nella directory Bin.Per fare ciò, cioè, per garantire che tu stia eseguendo l'eseguibile locale e non uno trovato nel tuo $PATH, hai bisogno di un '.'prima del comando.Quindi,

./bin/rails

non

bin/rails

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top