Pregunta

Actualmente estoy en Dreamhost intentando ejecutar una aplicación Rails 2.3.5.

Aquí está la situación, los servidores de Dreamhost tienen instalados Rails 2.2.2. Por supuesto, no puedo actualizar la versión de rieles de un host compartido, así que congelé mis rieles en el proveedor. Rails 2.3.5 requiere la gema rack v1.0.1. Dreamhost usa la gema rack v1.0.0. Entonces, cuando trato de definir:

config.gem "rack", :version => "1.0.1"

Obtengo:

can't activate rack (~> 1.0.1, runtime) for [], already activated rack-1.0.0 for []

Entonces, lo que realmente necesito hacer es omitir la solicitud de mi aplicación para usar 1.0.1 y usar Dreamhost's 1.0.0. ¿Alguien sabe cómo configurar esto? ¿Es posible? Gracias por la ayuda.

¿Fue útil?

Solución

Casi siempre querrás descomprimir las gemas de las que depende tu aplicación en la carpeta vendor . Puede hacerlo con este comando rake :

rake gems:unpack:dependencies

Esto creará una carpeta vendor / gems en la carpeta raíz de su aplicación y desempaquetará todas las gemas que declaró con el comando config.gem en ella.

Esto no solo resolverá su problema con las versiones de rack que no coinciden, sino que también se asegurará de que esté utilizando exactamente las mismas versiones de gemas en producción que las que está utilizando en el desarrollo, lo que puede evitar muchos posibles dolores de cabeza en el futuro.

Otros consejos

Dreamhost ha abordado este problema en su wiki de soporte ahora.

http://wiki.dreamhost.com/ Ruby_on_Rails # Rails_2.3.5 _-_ Rack_1.0_already_activated_.28fix.29

Desde esa página:

  

Cuando use Rails 2.3.5, obtendrá un problema de Passenger que dice que Rack 1.0.1 no se puede cargar porque Rack 1.0 ya está activado.

     

Una forma de resolver esto es congelando Rails y desempaquetando la gema Rack en vendor / gems / rack-1.0.1

     

Una vez que Rails y Rack estén en vendor / rails y vendor / gems / rack-1.0.1, debe modificar action_controller en el archivo: vendor / rails / actionpack / lib / action_controller.rb

     

En la línea, los números 34 y 35 deben comentarse y agregar lo siguiente para cargar el rack del proveedor / gemas

   load "#{RAILS_ROOT}/vendor/gems/rack-1.0.1/lib/rack.rb"
     

El resultado final debería verse más o menos así:

   #gem 'rack', '~> 1.0.1'
   #require 'rack'
   load "#{RAILS_ROOT}/vendor/gems/rack-1.0.1/lib/rack.rb"
     

El verdadero problema es que Passenger ya carga Rack 1.0 y creo que Passenger debe cargar 1.0.1 para que este hack desaparezca.

rake gems: unpack: dependencies no le permite descomprimir rake en su carpeta de vendedor / gems.

Para el problema de Dreamhost, debes hacer lo que Matt dijo. Congele los rieles a 2.3.4.

rake rails:freeze:gems VERSION=2.3.4

Dreamhost usa una versión anterior de Passenger que precarga el rack 1.0.0. No puede cargar el estante 1.0.1 una vez que el estante 1.0.0 ha sido precargado. Por lo tanto, la última versión de rails posible para DH es Rails 2.3.4 y Rack 1.0.0.

Me encontré con el mismo problema cuando intenté actualizar a 2.3.5.

Me pregunto en qué servidor está usted que todavía ejecuta Rails 2.2.2. Pensé que Dreamhost ya había movido a todos a 2.3.4. Me quejé con ellos hace 3 meses y actualizaron Passenger en mi servidor al día siguiente para poder instalar la versión actual de Rails. Por lo tanto, le recomiendo que presente un ticket de soporte si Rails 2.3.5 es vital para su aplicación. Pero no hubo muchos cambios entre 2.3.4 y 2.3.5, por lo que es probable que su aplicación funcione igual de bien en 2.3.4. ¿Intentaste ejecutarlo en 2.3.4 vendored?

No se trata de una gema faltante, se trata de una gema que se requiere dos veces con versiones que no coinciden. rastrillar gemas: desempaquetar: las dependencias no arreglan eso (lo intenté).

Sospecho que es un problema con la versión de Dreamhost's Passenger nuevamente. Mi servidor (buenosaires) tiene Passenger 2.2.5. La última versión de Passenger es 2.2.7.

Una simple actualización de gemas de rack no funcionó para mí porque parece que Rails 2.3.5 quiere específicamente Rack 1.0.1. Entonces, cuando hice una actualización de gemas rack -v = 1.0.1, Rails 2.3.5 comenzó de inmediato.

Aparentemente todo esto con Rails que quiere el rack 1.0.1 es un pequeño error de requisito de dependencia en actionpack que se puede resolver con bastante facilidad.

Para mí fue suficiente editar vendor / rails / actionpack / lib / action_controller.rb en la línea 34 desde gem 'rack', '~ > 1.0.1 ' a gem' rack ',' ~ > 1.0 ' y el problema desapareció.

Ver: https://rails.lighthouseapp.com/projects/8994-ruby-on-rails/tickets/3685-actionpack-235-gem-declares-incompatibility-with-rack-110

Dreamhost está actualizando Rack and Rails: http: // www .dreamhoststatus.com / 2009/12/21 / ruby-gem-updates /

Supongo que eso lo resuelve.

Creo que en este momento lo mejor sería descongelar todo y usar lo que está en dreamhost. Actualmente tienen rieles 2.3.4 y si puede esperar uno o dos días, dreamhost está actualizando las gemas de rieles a 2.3.5 (debería haberse actualizado ya ayer 21 de diciembre, pero por alguna razón no explicaron que están todavía en 2.3.4).

FWIW, puedo confirmar que congelar la gema no resuelve el problema; de hecho, antes de que mi despliegue explotara (¡usando DH's Rack 0.3.0, de alguna manera!), ahora mi spin-up explota con el mismo error visto anteriormente. Tal vez finalmente sea hora de mover mi aplicación de juguete / prueba de concepto a un alojamiento 'real' si quiero hacer algún trabajo.

ACTUALIZACIÓN: Mi servidor se actualizó a Rack 1.0.1 el 24 de diciembre de 2009, resolviendo el problema por mí. Si todavía tiene problemas en su cuenta, le recomendaría soporte de mensajería; fueron bastante receptivos en mi caso (con correos electrónicos, no acción, pero por el precio realmente no se puede tener todo).

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