Frage

Ich versuche, dem Tutorial „Getting Started with Engines“ Rails Guide zu folgen und habe Folgendes gefunden:

$ bin/rails plugin new blorgh --mountable

Wenn ich dies auf meinem Terminal eingebe, erhalte ich:

bash: bin/rails: No such file or directory

Wenn ich es einfach versuche $ rails es funktioniert ok.

Ich verwende seit ein paar Monaten die Befehlszeile und auch Rails.Ich kenne das $-Zeichen, bin mir aber nicht sicher, was das „bin“ danach bedeutet.Ich bin es gewohnt, „Rails“ direkt nach $ einzugeben, aber in diesem Tutorial heißt es, dass „bin“ verwendet werden soll ...

Was macht bin/ bedeuten?

War es hilfreich?

Lösung

tl;dr

Laufen bundle install --binstubs und es wird funktionieren.Sie müssen dies nur einmal tun und Bundler merkt sich, dass Sie (für dieses Projekt) danach gefragt haben.

Längere Antwort

Wenn Sie ein Bundle mit installieren bundle --binstubs, Bundler installiert alle Ihre Bundle-spezifischen Binstubs im bin/ Unterverzeichnis (relativ zur Gemfile), anstatt sie in die globalen Binstub-Pfade des Gemsets einzufügen.

Normalerweise würden Sie dies tun, um:

  1. Stellen Sie sicher, dass die rails binstub, das Sie ausführen, ist die Version in Ihrer Gemfile (im Gegensatz zu einer anderen Version, die später unabhängig von Bundler in Ihrem Gemset installiert wurde) und
  2. Um die Ausführungszeit zu verbessern (da sie funktional äquivalent ist zu bundle exec rails außer minus einem Unterprozessaufruf).

Globale Binstubs vs. Bundler-Binstubs

Wenn Sie tippen which rails, Sie erhalten einen langen Weg wie /usr/local/rvm/gems/jruby-1.7.18/bin/rails, und deren Inhalt: 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)

Nach dem Rennen bundler --binstubs, wenn du cat bin/rails, erhalten Sie so etwas wie:

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

Der Hauptunterschied besteht darin, dass die bin/ Version legt die fest BUNDLE_GEMFILE Umgebungsvariable, und es erfordert bundler/setup, was Bundler anweist, sein Ding mit Edelsteinpfaden zu machen.Der bin/rails Das Skript ist Bundler-fähig und kennt Ihre Gemfile, sodass es Ihre Umgebung sofort vorbereiten kann.

Ich empfehle generell die Verwendung --binstubs Und bin/x Aufrufe über die Gemset-Versionen.

Andere Tipps

Betrachten Sie dieses Szenario:

Ich hatte eine App, die Rails Version 4.0.0 verwendete.Mein Ziel war es, es auf Rails 4.1.9 zu aktualisieren.Dazu habe ich versucht, es Schritt für Schritt zu aktualisieren:Zuerst ein Upgrade auf 4.0.13, dann 4.1 und schließlich 4.1.9.

Alles verlief reibungslos.Alle Tests wurden mit RSpec bestanden.

Schließlich habe ich versucht, meinen Server damit zu betreiben rails s.Bumm!Ruby ist abgestürzt.Dann habe ich verwendet bin/rails s.Alles hat gut geklappt.

Daher denke ich, dass die Verwendung sicherer ist, wenn in Ihrem System eine andere Schienenversion eingerichtet ist bin/rails Möglichkeit.

P.S.Um sicherzustellen, dass meine Annahme richtig ist, habe ich alle Rails-Versionen außer 4.1.9 entfernt und dann versucht, den Server erneut auszuführen rails s.Diesmal kein Absturz.

Ich hoffe, das klärt.

Wenn Sie eine ausführbare Datei über die Shell in einem Unix-basierten Betriebssystem ausführen, wird zuerst Ihr Systempfad durchsucht.Um alle Verzeichnisse in Ihrem anzuzeigen $PATH, versuchen Sie Folgendes an der Eingabeaufforderung Ihres Terminals:

echo $PATH

Die ausführbare Rails-Datei befindet sich in einem der aufgelisteten Verzeichnisse.

Bearbeiten – Der Text unten ist völlig falsch, ich entschuldige mich

Optional können Sie die ausführbare Datei im Stammverzeichnis Ihres Rails-Verzeichnisses im Bin-Verzeichnis ausführen.Um dies zu tun, stellen Sie sicher, dass Sie die lokale ausführbare Datei ausführen und nicht eine, die sich in Ihrem befindet $PATH, du brauchst ein '.' vor dem Befehl.Also,

./bin/rails

nicht

bin/rails

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top