Ignorando rack de erro versão usando Rails 2.3.5
-
06-07-2019 - |
Pergunta
Atualmente estou no Dreamhost tentar executar um Rails 2.3.5 app.
Aqui está a situação, os servidores da Dreamhost tem Rails 2.2.2 instalado. Claro, eu não posso atualizar a versão trilhos de um servidor compartilhado, então eu congelei meus Rails no fornecedor. Rails 2.3.5 requer a jóia cremalheira v1.0.1. Dreamhost usa a jóia cremalheira v1.0.0. Então, quando eu tentar definir:
config.gem "rack", :version => "1.0.1"
eu recebo:
can't activate rack (~> 1.0.1, runtime) for [], already activated rack-1.0.0 for []
Então, o que eu realmente preciso fazer é ignorar o pedido do meu aplicativo para usar 1.0.1, e utilizar Dreamhost do 1.0.0. Alguém sabe como configurar isso? Será que é mesmo possível? Obrigado pela ajuda.
Solução
Você quase sempre deseja descompactar as jóias que a sua aplicação depende para a pasta vendor
. Você pode fazer isso com este comando rake
:
rake gems:unpack:dependencies
Isto irá criar uma vendor/gems
pasta na pasta raiz do seu aplicativo e descompactar todas as jóias que você declarado com o comando config.gem
para ele.
Isto não só vai resolver o seu problema com descasamento versões rack
, mas também certificar-se de que você está usando exatamente o mesmo versões de gemas em produção como você está usando em desenvolvimento, o que pode evitar muitas dores de cabeça potenciais no futuro.
Outras dicas
Dreamhost abordou esta questão em seu wiki apoio agora.
http://wiki.dreamhost.com/ Ruby_on_rails # Rails_2.3.5 _-_ Rack_1.0_already_activated_.28fix.29
A partir dessa página:
Ao usar Rails 2.3.5 você vai ter um problema de Passageiros dizendo cremalheira 1.0.1 não pode ser carregado porque cremalheira 1.0 já está ativado.
Uma maneira de resolver isso é por congelamento Rails e descompacte o gem cremalheira em vendor / gems / rack 1.0.1
Uma vez Rails e cremalheira estão nas vendor / rails e vendor / gems / rack 1.0.1 você deve modificar action_controller no arquivo: vendor / rails / actionpack / lib / action_controller.rb
Em números das linhas 34 e 35 devem ser comentada e adicione o seguinte ao rack de carga de fornecedor / gemas
load "#{RAILS_ROOT}/vendor/gems/rack-1.0.1/lib/rack.rb"
O resultado final deve ser algo como isto:
#gem 'rack', '~> 1.0.1' #require 'rack' load "#{RAILS_ROOT}/vendor/gems/rack-1.0.1/lib/rack.rb"
O problema real é que Passenger já cargas cremalheira 1,0 e acredito Passageiro deve carregar 1.0.1 para que este hack para ir embora.
rake gems:unpack:dependencies
não permitem que você ancinho descompactar para a pasta de vendor / gems.
Para a emissão Dreamhost, você deve fazer o que Matt disse. Congelar trilhos a 2.3.4.
rake rails:freeze:gems VERSION=2.3.4
Dreamhost usa uma versão mais antiga de passageiros que preloads acumular 1.0.0. Você não pode carregar acumular 1.0.1 vez cremalheira 1.0.0 foi pré-carregado. Portanto, a última versão do rails possível para DH é Rails 2.3.4 e 1.0.0 da cremalheira.
Eu corri para o mesmo problema quando eu tentei a atualização para 2.3.5.
Eu me pergunto o servidor estiver em que ainda corre Rails 2.2.2? Pensei Dreamhost teve todo mundo se mudou para 2.3.4 agora. Eu reclamei com eles 3 meses atrás e eles atualizado de passageiros no meu servidor no dia seguinte para que eu pudesse instalar a versão atual Rails. Então eu recomendo que você arquivar um ticket de suporte se Rails 2.3.5 é vital para a sua aplicação. Mas não havia muitas mudanças entre 2.3.4 e 2.3.5, então as chances são de seu aplicativo será executado tão bem em 2.3.4. Você tentou executá-lo em vendorizadas 2.3.4?
Não se trata de uma jóia em falta, trata-se de uma jóia que está sendo exigido duas vezes com versões descasamento. rake gems: unpack:. dependências não corrigir isso (eu tentei)
Eu suspeito que é um problema com a versão de passageiros do Dreamhost novamente. Meu servidor (buenosaires) tem Passageiros 2.2.5. Última versão de passageiros é 2.2.7.
A atualização gem simples de rack não fez trabalho para me porque parece que Rails 2.3.5 desejos cremalheira 1.0.1 especificamente. Então, quando eu fiz um rack atualização gem -v = 1.0.1, Rails 2.3.5 começou a direita acima.
Aparentemente, essa coisa toda com Rails querendo cremalheira 1.0.1 é um pequeno bug requisito de dependência em actionpack que pode ser resolvido com bastante facilidade.
Para mim, foi o suficiente para editar vendor/rails/actionpack/lib/action_controller.rb
na linha 34 da gem 'rack', '~> 1.0.1'
para gem 'rack', '~> 1.0'
eo problema foi embora.
Dreamhost é atualizar rack e Rails: http: // www .dreamhoststatus.com / 2009/12/21 / ruby-gem-updates /
Eu acho que resolve-lo.
Eu acho que no momento o melhor seria a tudo descongelar e usar o que está em dreamhost. Eles têm actualmente trilhos 2.3.4 e se você pode esperar um dia ou dois - dreamhost é atualizar trilhos gemas para 2.3.5 (que deveria ter sido já atualizado ontem em 21 de dezembro -, mas por algum motivo eles não explicou que eles são ainda em 2.3.4).
FWIW, posso confirmar que o congelamento a gema não resolve o problema; na verdade, em que antes da minha implantar estava explodindo (usando cremalheira 0.3.0 da DH, de alguma forma!), agora meus spin-up explode com o mesmo erro visto acima. Talvez finalmente é hora de mover o meu brinquedo / prova de aplicativo conceito de 'real' de hospedagem se eu quiser obter qualquer trabalho feito.
UPDATE: O meu servidor foi atualizado para rack 1.0.1 em 24 de dezembro de 2009, resolvendo o problema para mim. Se você ainda estiver enfrentando problemas em sua conta Eu recomendaria suporte de mensagens; eles foram bastante sensível no meu caso (com e-mails, não a ação, mas para o preço que você realmente não pode ter tudo).