Respostas:
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
_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> '
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:
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
bundle update
, ele também atualizará os trilhos !!
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.)
--force
está substituindo o Gemfile
bundle exec rails new...
executou a versão rails
especificada no Gemfile que acaba sendo substituída.)
gem 'rails', '5.0.0.1' >> Gemfile
e depois de executar bundle exec rails new
com 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
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 --force
flag) 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
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_VERSION
variável config/environment.rb
e emitir a tarefa freeze rake:
rake rails:freeze:gems
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