Question

J'essaie de suivre le didacticiel du guide Rails "Mise en route avec les moteurs" et j'ai trouvé ceci :

$ bin/rails plugin new blorgh --mountable

Lorsque je tape ceci sur mon terminal, j'obtiens :

bash: bin/rails: No such file or directory

Quand j'essaye juste $ rails ça marche bien.

J'utilise la ligne de commande depuis quelques mois, ainsi que Rails.Je connais le signe $ mais je ne comprends pas la signification du "bin" après cela.J'ai l'habitude de taper "Rails" juste après $, mais ce tutoriel dit d'utiliser "bin"...

Qu'est-ce que bin/ signifier?

Était-ce utile?

La solution

tl;dr

Courir bundle install --binstubs et ça marchera.Vous ne devez le faire qu'une seule fois et Bundler se souviendra que vous l'avez demandé (pour ce projet).

Réponse plus longue

Lorsque vous installez un bundle avec bundle --binstubs, Bundler installera tous vos binstubs spécifiques au bundle dans le bin/ sous-répertoire (par rapport au Gemfile), plutôt que de les placer dans les chemins binstub globaux du gemset.

Vous feriez généralement cela pour :

  1. Assurez-vous que le rails binstub que vous exécutez est celui de votre Gemfile (par opposition à une version différente qui a été installée ultérieurement dans votre gemset, distincte de Bundler), et
  2. Pour améliorer le temps d'exécution (puisqu'il est fonctionnellement équivalent à bundle exec rails sauf moins un appel de sous-processus).

Binstubs globaux vs binstubs Bundler

Si vous tapez which rails, tu auras un long chemin comme /usr/local/rvm/gems/jruby-1.7.18/bin/rails, et dont le contenu : 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)

Après avoir couru bundler --binstubs, si tu cat bin/rails, vous obtiendrez quelque chose comme :

#!/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 principale différence est que le bin/ la version définit le BUNDLE_GEMFILE variable d'environnement, et cela nécessite bundler/setup, c'est ce qui dit à Bundler d'aller faire son travail avec les chemins de pierres précieuses.Le bin/rails script est compatible avec le bundler et connaît votre Gemfile, il peut donc préparer votre environnement dès le départ.

Je recommande généralement d'utiliser --binstubs et bin/x invocations sur les versions gemset.

Autres conseils

Considérez ce scénario :

J'avais une application qui utilisait Rails version 4.0.0.Mon objectif était de le mettre à niveau vers Rails 4.1.9.Pour ce faire, j'ai essayé de le mettre à jour étape par étape :d'abord, mise à niveau vers 4.0.13, puis 4.1 et enfin 4.1.9.

Tout s'est bien passé.Tous les tests ont réussi avec RSpec.

Finalement, j'ai essayé de faire fonctionner mon serveur avec rails s.Boum !Ruby s'est écrasé.Ensuite, j'ai utilisé bin/rails s.Tout s'est bien passé.

Je pense donc que si vous avez une version différente des rails configurée dans votre système, il est plus sûr d'utiliser bin/rails option.

P.S.Pour m'assurer que mon hypothèse est correcte, j'ai supprimé toutes les versions de Rails sauf 4.1.9, puis j'ai essayé de réexécuter le serveur avec rails s.Pas de crash cette fois.

J'espère que cela clarifie.

Lorsque vous exécutez un exécutable via Shell dans un système d'exploitation basé sur Unix, votre chemin système sera recherché en premier.Pour voir tous les répertoires de votre $PATH, essayez ceci à partir de l'invite de votre terminal :

echo $PATH

l'exécutable rails sera présent dans l'un des répertoires répertoriés.

Edit - Le texte ci-dessous est complètement faux, mes excuses

Facultativement, à partir de la racine de votre répertoire rails, vous pouvez exécuter l'exécutable dans le répertoire bin.Pour ce faire, c'est-à-dire pour vous assurer que vous exécutez l'exécutable local et non celui trouvé dans votre $PATH, tu as besoin d'un '.' avant la commande.Donc,

./bin/rails

pas

bin/rails

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top