Especificación de la versión de rails para usar al crear una nueva aplicación

227

Tengo dos versiones de rieles (2.1.0 y 2.2.2) instaladas en mi computadora.

Cuando creo una nueva aplicación, ¿es posible especificar que quiero usar la versión anterior (2.1.0)?

hectorsq
fuente

Respuestas:

503

Encontré aquí una opción no documentada para crear una nueva aplicación utilizando una versión anterior de Rails.

rails _2.1.0_ new myapp 
hectorsq
fuente
1
Debe cambiar esto a la respuesta aceptada, ya que funciona para Rails 2 y 3. La respuesta de Keltia ya no funcionará si tiene Rails 3 instalado y desea una aplicación Rails 2.
Peter Brown
Error al tener Rails 3 instalado falla para 2.3.5 - Acabo de probar en Mac OS X Snow Leopard con estos módulos instalados: rails (3.0.5, 2.3.5, 2.2.2, 1.2.6)
Mike
13
Esta es la funcionalidad de RubyGems, no la funcionalidad de Rails; Por lo tanto, no depende de la versión de Rails, y funcionará para otras gemas. (¡Gracias, esta es una gran respuesta!)
Calrion
2
Recibo un error al usar 3.1.3 cuando 3.1.3 y 3.2.0.rc1 están instalados. Aquí está el error --- [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 <principal> '
Ninad
¡Muy útil ahora que 4.0.0 está fuera!
Jason
67

Aquí está el comando que uso normalmente:

rails _version_ new application_name

por ejemplo rails _2.1.0_ new my_app

Aquí está la lista de todas las versiones de rieles disponibles hasta ahora:

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

Hardik
fuente
26

Estaba teniendo problemas para usar rails _version_ new application_name(el proyecto resultante todavía se generó para la versión más nueva de Rails instalada).

Después de un poco de excavación, encontré un artículo de Michael Trojanek con un enfoque alternativo. Esto funciona creando una carpeta con un Gemfile que especifica la versión deseada de Rails y luego usándola bundle exec rails...para que Bundler se encargue de ejecutar la versión adecuada de rails. Por ejemplo, para hacer un nuevo proyecto Rails 4.2.9, los pasos son:

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
fuente
¡No creo que sea necesario bundle update, también actualizará los rieles!
Rajkaran Mishra
@devel bundle updatese necesita porque se está utilizando una actualización manual ( --skip-bundle). Los rieles no se actualizarán porque se especifica una versión específica en el Gemfile (4.2.9 en el ejemplo)
Mikej
--forceestá sobrescribiendo el Gemfile
Rajkaran Mishra
Sí, pero el nuevo Gemfile que se escribe aún especifica la versión de Rails que queríamos (porque bundle exec rails new...ejecutó la versión railsespecificada en el Gemfile que termina siendo reemplazada)
Mikej
1
Lo hice gem 'rails', '5.0.0.1' >> Gemfiley después de ejecutar bundle exec rails newcon la opción --force, está gem 'rails', '~> 5.0.0', '>= 5.0.0.1'en Gemfile. Ahora cuando ejecuto bundle update, está actualizando los rieles a 5.0.4 (en Gemfile.lock), pero esperaba usar los rieles versión 5.0.0.1
Rajkaran Mishra
9

Como señaló correctamente @mikej para Rails 5.0.0 o superior , debe seguir estos pasos:

Cree un directorio para su aplicación junto con un Gemfile para especificar la versión de Rails que desee y permita que el paquete instale las gemas dependientes:

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

Verifique que se haya instalado la versión correcta de los rieles: $ bundle exec rails -v

Ahora cree su aplicación, deje que Rails cree un nuevo Gemfile (o más bien sobrescriba el existente usando la --forcebandera) y en lugar de instalar el paquete ( --skip-bundle) actualícelo manualmente:

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

Si marca la entrada para rieles Gemfile, debería ser así:

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

Debe actualizarlo a la versión exacta necesaria para la aplicación:

gem 'rails', '5.0.0.1'

Ahora, el paso final:

$ bundle update
Rajkaran Mishra
fuente
3

Puede generar el esqueleto con cualquier versión y requerir la que desee en 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

o use el comando "rails" de la versión que desee de todos modos.

Keltia
fuente
3

También deberías echar un vistazo a "congelar" tus gemas Rails en la aplicación. Esto ayuda mucho con la implementación, especialmente en entornos de alojamiento compartido.

Simplemente cambie la RAILS_GEM_VERSIONvariable config/environment.rby emita la tarea de congelar rastrillo:

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

Hay dos formas de lograr esto:

uno como se sugiere en la respuesta aceptada:

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

y un método alternativo es crear un archivo de gemas con la versión de rieles deseada antes de inicializar el proyecto de rieles

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

He escrito sobre esto en detalle en mi artículo

Prakash
fuente