Domanda

Attualmente sono su Dreamhost che tento di eseguire un'app Rails 2.3.5.

Ecco la situazione, nei server di Dreamhost è installato Rails 2.2.2. Naturalmente, non riesco ad aggiornare la versione di rails di un host condiviso, quindi ho bloccato i miei Rails nel fornitore. Rails 2.3.5 richiede il gemma v1.0.1 del rack. Dreamhost utilizza la gemma v1.0.0 del rack. Quindi, quando provo a definire:

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

Ottengo:

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

Quindi quello che devo davvero fare è bypassare la richiesta della mia app di usare 1.0.1 e usare la 1.0.0 di Dreamhost. Qualcuno sa come configurarlo? È anche possibile? Grazie per l'aiuto.

È stato utile?

Soluzione

Quasi sempre vorrai decomprimere le gemme da cui dipende l'applicazione nella cartella vendor . Puoi farlo con questo comando rake :

rake gems:unpack:dependencies

Questo creerà una cartella vendor / gems nella cartella principale dell'applicazione e decomprimerà tutte le gemme che hai dichiarato con il comando config.gem .

Questo non solo risolverà il tuo problema con le versioni rack non corrispondenti, ma assicurati anche di utilizzare esattamente le stesse versioni di gemme in produzione che stai usando in sviluppo, il che può prevenire molti potenziali mal di testa in futuro.

Altri suggerimenti

Dreamhost ha risolto questo problema sulla sua wiki di supporto adesso.

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

Da quella pagina:

  

Quando si utilizza Rails 2.3.5 si riceverà un problema da Passeggero che dice che il Rack 1.0.1 non può essere caricato perché il Rack 1.0 è già attivato.

     

Un modo per risolverlo è congelare Rails e spacchettare la gemma Rack in vendor / gems / rack-1.0.1

     

Una volta che Rails e Rack sono nel fornitore / rails e vendor / gems / rack-1.0.1, è necessario modificare action_controller nel file: vendor / rails / actionpack / lib / action_controller.rb

     

Nei numeri di riga 34 e 35 è necessario commentare e aggiungere quanto segue per caricare il rack dal fornitore / gemme

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

Il risultato finale dovrebbe assomigliare a questo:

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

Il vero problema è che Passenger carica già Rack 1.0 e credo che Passenger debba caricare 1.0.1 per far scomparire questo hack.

rake gems: unpack: dependencies non ti consente di decomprimere rake nella cartella del tuo fornitore / gemme.

Per il problema di Dreamhost, devi fare ciò che ha detto Matt. Blocca le guide su 2.3.4.

rake rails:freeze:gems VERSION=2.3.4

Dreamhost utilizza una versione precedente di Passenger che precarica il rack 1.0.0. Non è possibile caricare il rack 1.0.1 dopo aver precaricato il rack 1.0.0. Pertanto, l'ultima versione di binari possibile per DH è Rails 2.3.4 e Rack 1.0.0.

Ho riscontrato lo stesso problema quando ho provato ad aggiornare alla 2.3.5.

Mi chiedo su quale server ti trovi che esegue ancora Rails 2.2.2? Pensavo che ormai Dreamhost fosse passato a 2.3.4. Mi sono lamentato con loro 3 mesi fa e hanno aggiornato Passenger sul mio server il giorno dopo in modo da poter installare l'attuale versione di Rails. Quindi ti consiglio di presentare un ticket di supporto se Rails 2.3.5 è vitale per la tua app. Ma non ci sono stati molti cambiamenti tra 2.3.4 e 2.3.5, quindi è probabile che la tua app funzionerà altrettanto bene su 2.3.4. Hai provato a eseguirlo su 2.3.4 in vendita?

Non si tratta di una gemma mancante, si tratta di una gemma che viene richiesta due volte con versioni non corrispondenti. gemme rake: decomprimere: le dipendenze non risolvono questo problema (ho provato).

Sospetto che sia di nuovo un problema con la versione Passenger di Dreamhost. Il mio server (buenosaires) ha Passenger 2.2.5. L'ultima versione del passeggero è la 2.2.7.

Un semplice aggiornamento gemma di rack non ha funzionato per me perché sembra che Rails 2.3.5 desideri specificamente Rack 1.0.1. Quindi, quando ho fatto un aggiornamento gem-rack -v = 1.0.1, Rails 2.3.5 è stato avviato.

Apparentemente tutta questa faccenda con Rails che vuole il rack 1.0.1 è un piccolo bug del requisito di dipendenza in actionpack che può essere risolto abbastanza facilmente.

Per me è stato sufficiente modificare vendor / rails / actionpack / lib / action_controller.rb sulla riga 34 da gem 'rack', '~ > 1.0.1 ' in gem' rack ',' ~ > 1.0 ' e il problema è scomparso.

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

Dreamhost sta aggiornando Rack e Rails: http: // www .dreamhoststatus.com / 2009/12/21 / ruby-gem-aggiornamenti /

Suppongo che lo risolva.

Penso che al momento il migliore sarebbe sbloccare tutto e usare ciò che è su dreamhost. Al momento hanno le rotaie 2.3.4 e se puoi aspettare un giorno o due - dreamhost sta aggiornando le gemme delle rotaie alla 2.3.5 (avrebbe dovuto essere aggiornato già ieri il 21 dicembre - ma per qualche ragione non hanno spiegato che lo sono ancora il 2.3.4).

FWIW, posso confermare che il congelamento della gemma non risolve il problema; infatti, dove prima esplodeva il mio schieramento (usando DH 0.3 Rack, in qualche modo!), ora il mio spin-up esplode con lo stesso errore visto sopra. Forse è finalmente arrivato il momento di spostare la mia app giocattolo / prova di concetto su un hosting "reale" se voglio svolgere qualsiasi lavoro.

AGGIORNAMENTO: il mio server è stato aggiornato a Rack 1.0.1 il 24 dicembre 2009, risolvendo il problema per me. Se continui a riscontrare problemi con il tuo account, consiglierei il supporto di messaggistica; erano abbastanza reattivi nel mio caso (con e-mail, non azioni, ma per il prezzo non si può davvero avere tutto).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top