Pergunta

Eu estou tentando seguir junto "como Começar com Motores" Trilhos de Guia tutorial e achei isso:

$ bin/rails plugin new blorgh --mountable

Quando eu escreva isso no meu terminal, eu recebo:

bash: bin/rails: No such file or directory

Quando eu tento apenas $ rails ele funciona OK.

Estou usando a linha de comando para um par de meses, e os Trilhos bem.Eu sei que o sinal$, mas eu estou confuso sobre o significado do "bin" depois disso.Eu sou usado tipo de "Trilhos" logo após $, mas este tutorial diz que o uso de "bin" ...

O que faz bin/ significa?

Foi útil?

Solução

tl;dr

Executar bundle install --binstubs e ele vai trabalhar.Você só precisa fazer isso uma vez e Bundler vai se lembrar que você pediu para ele (para o projeto).

Resposta longa

Quando você instala um pacote com bundle --binstubs, Bundler irá instalar todos do seu pacote específico para o binstubs bin/ subdiretório (relativo ao Gemfile), ao invés de colocá-los no gemset global binstub caminhos.

Você normalmente faria isso para:

  1. Certifique-se de que o rails binstub você está executando é o único em seu Gemfile (em oposição a uma versão diferente do que tem instalado em seu gemset mais tarde, separado do Bundler), e
  2. Para melhorar o tempo de execução (já que é funcionalmente equivalente a bundle exec rails exceto, menos um subprocesso de invocação).

Global binstubs vs Bundler binstubs

Se você digitar which rails, você vai ter um longo caminho como /usr/local/rvm/gems/jruby-1.7.18/bin/rails, e o conteúdo que: 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)

Após a execução bundler --binstubs, se você cat bin/rails, você terá 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')

A principal diferença que há é que o bin/ a versão define o BUNDLE_GEMFILE variável de ambiente, e requer bundler/setup, que é o que informa Bundler para ir fazer a sua coisa com gema caminhos.O bin/rails script é bundler-conhecimento, e está ciente do seu Gemfile, portanto, pode preparar o ambiente para a direita fora do bastão.

Eu geralmente recomendo usar --binstubs e bin/x invocações sobre o gemset versões.

Outras dicas

Considere este cenário:

Eu tinha um app que estava usando Rails versão 4.0.0.Meu objetivo era atualizar ele para o Rails 4.1.9.Para fazer isso, eu tentei atualizá-lo passo-a-passo:primeiro, a atualização para versão 4.0.13, em seguida, 4.1 e finalmente 4.1.9.

Tudo correu bem.Todos os testes foram passando utilizando RSpec.

Finalmente, eu tentei executar o meu servidor com rails s.Booom!Ruby caiu.Então, eu usei bin/rails s.Correu tudo ok.

Então, eu acho que se você tem outra versão do rails, configurado no seu sistema, é mais seguro usar bin/rails opção.

P. S.Para se certificar de que a minha suposição é correta, eu removi todos os trilhos versão exceto 4.1.9 e, em seguida, eu tentei executar o servidor com rails s.Não falhar desta vez.

Espero que isso esclarece.

Quando você executar um executável através do shell em um sistema operacional baseado em unix, o caminho do sistema vai ser procurado em primeiro lugar.Para ver todos os diretórios em seu $PATH, tente isso a partir de seu terminal de comandos:

echo $PATH

os trilhos executável estará presente em um dos diretórios listados.

Edite - O texto abaixo é completamente errado, as minhas desculpas

Opcionalmente, a partir da raiz do seu trilhos de diretório, você pode executar o arquivo executável no diretório bin.Para fazer isso, que é, para garantir que você está executando o executável local e não foi encontrado em seu $PATH, você precisa de um". " antes do comando.Assim,

./bin/rails

não

bin/rails

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top