Especificando a versão do Rails a ser usada ao criar um novo aplicativo

227

Eu tenho duas versões dos trilhos (2.1.0 e 2.2.2) instaladas no meu computador.

Quando crio um novo aplicativo, é possível especificar que desejo usar a versão mais antiga (2.1.0)?

hectorsq
fonte

Respostas:

503

Encontrei aqui uma opção não documentada para criar um novo aplicativo usando uma versão mais antiga do Rails.

rails _2.1.0_ new myapp 
hectorsq
fonte
1
Você deve alterar isso para a resposta aceita, pois funciona para o Rails 2 e 3. A resposta do Keltia não funcionará mais se você tiver o Rails 3 instalado e desejar um aplicativo Rails 2.
Peter Brown
Errado que o Rails 3 instalado falha no 2.3.5 - Apenas testado no Mac OS X Snow Leopard com estes módulos instalados: rails (3.0.5, 2.3.5, 2.2.2, 1.2.6)
Mike
13
Esta é a funcionalidade RubyGems, não a funcionalidade Rails; portanto, não depende da versão do Rails e funcionará para outras gemas. (Obrigado, esta é uma grande resposta!)
Calrion
2
Eu recebo um erro ao usar o 3.1.3 quando 3.1.3 e 3.2.0.rc1 estão instalados. Aqui está o erro --- [ninad @ localhost devel] $ rails _3.1.3_new sample_app /home/ninad/.rbenv/versions/1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems.rb:314:in bin_path': can't find gem railties (["3.1.3"]) with executable rails (Gem::GemNotFoundException) from /home/ninad/.rbenv/versions/1.9.2-p290/bin/rails:19:in <main> '
Ninad 25/12/11
Muito útil agora que o 4.0.0 foi lançado!
Jason
67

Aqui está o comando que eu uso normalmente:

rails _version_ new application_name

por exemplo rails _2.1.0_ new my_app

Aqui está a lista de todas as versões de trilhos disponíveis até o momento:

http://rubygems.org/gems/rails/versions

Hardik
fonte
26

Eu estava com problemas para usar rails _version_ new application_name(o projeto resultante ainda foi gerado para a versão mais recente do Rails instalada.)

Depois de um pouco de pesquisa, encontrei um artigo de Michael Trojanek com uma abordagem alternativa. Isso funciona criando uma pasta com um Gemfile especificando a versão desejada do Rails e depois usando bundle exec rails...para que o Bundler cuide da execução da versão apropriada do rails. por exemplo, para criar um novo projeto do Rails 4.2.9, as etapas são:

mkdir myapp
cd myapp
echo "source 'https://rubygems.org'" > Gemfile
echo "gem 'rails', '4.2.9'" >> Gemfile
bundle install

bundle exec rails new . --force --skip-bundle
bundle update
mikej
fonte
Eu não acho que seja necessário bundle update, ele também atualizará os trilhos !!
Rajkaran Mishra
@evelevel bundle updateé necessário porque uma atualização manual está sendo usada ( --skip-bundle). Rails não será atualizado porque uma versão específica é especificado no Gemfile (4.2.9 no exemplo.)
MikeJ
--forceestá substituindo o Gemfile
Rajkaran Mishra
Sim, mas o novo Gemfile que é escrito ainda especifica a versão do Rails que desejávamos (porque bundle exec rails new...executou a versão railsespecificada no Gemfile que acaba sendo substituída.)
MikeJ
1
Eu fiz gem 'rails', '5.0.0.1' >> Gemfilee depois de executar bundle exec rails newcom a opção --force, está gem 'rails', '~> 5.0.0', '>= 5.0.0.1'no Gemfile. Agora, quando eu corro bundle update, está atualizando os trilhos para 5.0.4 (em Gemfile.lock), mas eu esperava usar a versão 5.0.0.1 do rails
Rajkaran Mishra
9

Conforme corretamente apontado por @mikej para o Rails 5.0.0 ou superior , você deve seguir estas etapas:

Crie um diretório para o seu aplicativo junto com um Gemfile para especificar a versão desejada do Rails e deixe o bundler instalar as gemas dependentes:

$ mkdir myapp
$ cd myapp
$ echo "source 'https://rubygems.org'" > Gemfile
$ echo "gem 'rails', '5.0.0.1'" >> Gemfile
$ bundle install

Verifique se a versão correta dos trilhos foi instalada: $ bundle exec rails -v

Agora crie seu aplicativo, deixe o Rails criar um novo Gemfile (ou melhor, substitua o existente usando a --forceflag) e, em vez de instalar o pacote ( --skip-bundle), atualize-o manualmente:

$ bundle exec rails new . --force --skip-bundle

Se você verificar a entrada para trilhos Gemfile, deve ser assim:

gem 'rails', '~> 5.0.0', '>= 5.0.0.1'

Você deve atualizá-lo para a versão exata necessária para o aplicativo:

gem 'rails', '5.0.0.1'

Agora, o passo final:

$ bundle update
Rajkaran Mishra
fonte
3

Você pode gerar o esqueleto com uma das versões e exigir a que deseja config/environment.rb:

# Specifies gem version of Rails to use when vendor/rails is not present
RAILS_GEM_VERSION = '2.1.2' unless defined? RAILS_GEM_VERSION

ou use o comando "rails" da versão que você deseja.

Keltia
fonte
3

Você também deve "congelar" suas gemas Rails no aplicativo. Isso ajuda muito na implantação, especialmente em ambientes de hospedagem compartilhada.

Basta alterar a RAILS_GEM_VERSIONvariável config/environment.rbe emitir a tarefa freeze rake:

rake rails:freeze:gems
Thiago Arrais
fonte
use rvm use rubyversion
Apoorv
1

Existem duas maneiras de conseguir isso:

um como sugerido na resposta aceita:

gem install rails -v 2.1.0 #only when the gem has not been installed in the desired ruby version you are using, so that you don't get error on next step
rails _2.1.0_ new my_app

O método alternativo é criar gemfile com a versão desejada do rails antes de inicializar o projeto do rails

mkdir my_app
cd my_app
echo "source 'https://rubygems.org'" > Gemfile
echo "gem 'rails', '2.1.0'" >> Gemfile
bundle install

bundle exec rails new . --force --skip-bundle

Eu escrevi sobre isso em detalhes no meu artigo

Prakash
fonte