Pregunta

Estoy tratando de seguir el tutorial de la Guía Rails "Introducción a los motores" y encontré esto:

$ bin/rails plugin new blorgh --mountable

Cuando escribo esto en mi terminal, aparece:

bash: bin/rails: No such file or directory

Cuando lo intento solo $ rails funciona bien.

He estado usando la línea de comandos durante un par de meses y Rails también.Conozco el signo $ pero estoy confundido acerca del significado del "contenedor" después de eso.Estoy acostumbrado a escribir "Rails" justo después de $, pero este tutorial dice que use "bin"...

Que hace bin/ ¿significar?

¿Fue útil?

Solución

tl; dr

Correr bundle install --binstubs y funcionará.Sólo tienes que hacerlo una vez y Bundler recordará que lo pediste (para ese proyecto).

respuesta más larga

Cuando instalas un paquete con bundle --binstubs, Bundler instalará todos los binstubs específicos de su paquete en el bin/ subdirectorio (relativo al Gemfile), en lugar de colocarlos en las rutas binstub globales del conjunto de gemas.

Normalmente harías esto para:

  1. Asegúrese de que el rails binstub que estás ejecutando es el que está en tu Gemfile (a diferencia de una versión diferente que se instaló en tu conjunto de gemas más tarde, separada de Bundler), y
  2. Para mejorar el tiempo de ejecución (ya que es funcionalmente equivalente a bundle exec rails excepto menos una invocación de subproceso).

Binstubs globales frente a binstubs de Bundler

si escribes which rails, obtendrás un camino largo como /usr/local/rvm/gems/jruby-1.7.18/bin/rails, y cuyo contenido: 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)

despues de correr bundler --binstubs, si usted cat bin/rails, obtendrás algo como:

#!/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 diferencia clave es que el bin/ La versión establece el BUNDLE_GEMFILE variable de entorno, y requiere bundler/setup, que es lo que le dice a Bundler que haga lo suyo con los caminos de gemas.El bin/rails El script reconoce el paquete y conoce su Gemfile, por lo que puede preparar su entorno de inmediato.

Generalmente recomiendo usar --binstubs y bin/x invocaciones sobre las versiones de conjuntos de gemas.

Otros consejos

Considere este escenario:

Tenía una aplicación que usaba Rails versión 4.0.0.Mi objetivo era actualizarlo a Rails 4.1.9.Para hacerlo, intenté actualizarlo paso a paso:primero, actualizando a 4.0.13, luego 4.1 y finalmente 4.1.9.

Todo salió bien.Todas las pruebas pasaron usando RSpec.

Finalmente, intenté ejecutar mi servidor con rails s.¡Auge!Ruby se estrelló.Entonces, usé bin/rails s.Todo salió bien.

Entonces creo que si tienes una versión diferente de rieles configurados en tu sistema, es más seguro usarlos. bin/rails opción.

PDPara asegurarme de que mi suposición sea correcta, eliminé todas las versiones de Rails excepto la 4.1.9 y luego intenté volver a ejecutar el servidor con rails s.Esta vez no hay ningún accidente.

Espero que esto se aclare.

Cuando ejecuta un ejecutable a través de Shell en un sistema operativo basado en Unix, primero se buscará la ruta de su sistema.Para ver todos los directorios en su $PATH, prueba esto desde el indicador de tu terminal:

echo $PATH

El ejecutable de Rails estará presente en uno de los directorios enumerados.

Editar: el texto siguiente es completamente incorrecto, mis disculpas.

Opcionalmente, desde la raíz de su directorio Rails, puede ejecutar el ejecutable en el directorio bin.Para hacer esto, es decir, para asegurarse de que está ejecutando el ejecutable local y no uno que se encuentre en su $PATH, tu necesitas un '.' antes de la comando.Entonces,

./bin/rails

no

bin/rails

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top