Sou muito novo em bundler e capistrano, e estou tentando usá-los juntos. Quando tento implantar, recebo a mensagem:
Você está tentando instalar no modo de implantação após alterar seu Gemfile. Execute `bundle install 'em outro lugar e adicione o Gemfile.lock atualizado ao controle de versão.
Não sei como satisfazer o sistema que está reclamando, e não entendo por que a reclamação está surgindo porque li no documento :
Se um Gemfile.lock existe, e você atualizou seu Gemfile (5), o bundler usará as dependências no Gemfile.lock para todas as gemas que você não atualizou, mas irá resolver novamente as dependências das gemas que você atualizou . Você pode encontrar mais informações sobre esse processo de atualização abaixo em ATUALIZAÇÃO CONSERVATIVA.
Eu interpreto isso como significando que o Bundler pode lidar com o fato de que meu Gemfile não é o que ele esperava. Qualquer ajuda?
Especificações: Ruby 1.9.3, Rails 3.2.3, Capistrano 2.12.0, Bundler 1.1.4, Windows 7, implantando em uma máquina Posix.
Edit: My Gemfile inclui blocos lógicos como o seguinte:
unless RbConfig::CONFIG['host_os'] === 'mingw32'
# gem 'a' ...
end
fonte
unless RbConfig::CONFIG['host_os'] === 'mingw32'
:? (Logo, ele deve agrupar itens diferentes no meu computador Windows e no servidor Linux.):platforms
sinalizador para as gemas que meu servidor prod (posix) precisava, mas que não estavam em meu servidor dev (win) fez a diferença:platforms :ruby do; gem 'mygem'; ...; end
(Você recebe a marca de seleção verde se não se importar em adicionar esta instrução à sua resposta.):require
, funciona bem também stackoverflow.com/a/16475580/933358vi .bundle / config
mude a opção BUNDLE_FROZEN de '1' para '0'
faça "bundle install"
OU
execute "bundle config"
veja se o valor "congelado" é verdadeiro defina-o como falso
configuração do pacote congelada falsa
fonte
bundle config frozen false
é minha correção goto. Muito obrigado, dois anos depois! Acredito que a resposta de Joshua Pinter aborda o comentário acima - pode ser a configuração global do Bundler afetando isso.bundle config frozen false
não fez nada por mim. Recorri à edição de .bundle / config em que a entrada BUNDLE_FROZEN = "true" (textual true)Cuidado com a configuração global do Bundler.
Eu tinha uma configuração global em meu ambiente de desenvolvimento
~/.bundle/config
que não tinha em meu ambiente de CI / Produção, o que fazia comGemfile.lock
que o gerado em meu ambiente de desenvolvimento fosse diferente daquele em meu ambiente de CI / Produção.No meu caso, eu estava definindo
github.https
como true no meu ambiente de desenvolvimento, mas não tinha essa configuração no meu ambiente de CI / Produção. Isso fazia com que os doisGemfile.lock
arquivos fossem diferentes.fonte
Quando você vê o seguinte ...
$ bundle install You are trying to install in deployment mode after changing your Gemfile. Run `bundle install` elsewhere and add the updated Gemfile.lock to version control. If this is a development machine, remove the Gemfile freeze by running `bundle install --no-deployment`. You have added to the Gemfile: * source: rubygems repository https://rubygems.org/ * rails (~> 3.2) . . .
... Então, o problema é mais provável que você tenha arquivos .gem desatualizados em seu diretório vendor / cache.
Talvez você tenha executado anteriormente o
$bundle install --deployment
que colocou alguns arquivos .gem "desatualizados" no cache?Em qualquer caso, você pode superar esse erro executando:
bundle install --no-deployment
Essa é uma das muitas coisas boas sobre Rails ... as mensagens de erro geralmente dizem a você exatamente o que fazer para corrigir o problema.
fonte
Meu problema específico estava relacionado ao que foi relatado por @JoshPinter, ou seja, discrepâncias de host dev-vs-deploy no protocolo usado pelo bundler para recuperar joias do github.
Para encurtar a história, tudo o que tive que fazer foi modificar a seguinte
Gemfile
entrada ...gem 'activeadmin', github: 'activeadmin'
... para esta sintaxe segura ( consulte a referência ):
gem 'activeadmin', git: 'https://github.com/activeadmin/activeadmin.git'
E minhas implantações voltaram ao normal.
fonte
A solução para mim foi um pouco diferente das outras listadas aqui. Eu estava tentando atualizar do sidekiq para o sidekiq-pro (que requer bundler 1.7.12+), mas continuei recebendo a mensagem "Você está tentando instalar no modo de implantação após alterar seu Gemfile" do travis-ci
A inspeção da saída do console do travis-ci revelou que uma versão mais antiga do bundler estava sendo usada.
No meu caso, tive que editar o arquivo travis.yml para adicionar:
before_install: - gem update bundler
Isso forçou travis-ci a usar a versão mais recente do bundler e fez com que a mensagem de erro desaparecesse.
fonte
cap shell
egem update bundler
ouwith <role> gem update bundler
ouon <machine> gem update bundler
Eu não me importo. Isso é o que eu fiz. Ele consertou.
rm -rf .bundle rm -rf Gemfile.lock bundle install
fonte
rm -fr .bundle
Resolvido o problema para mim.
fonte
Já encontrei algo semelhante antes. Uma maneira de consertar, eu acho, mas pode ocupar mais espaço em seu servidor do que você deseja, é executar
bundle install --deployment
e tente implantar. Isso faz algo como instalar todas as suas joias na pasta vendor, o que eu acredito que geralmente é bom evitar ... mas provavelmente ainda funcionará. Meu aplicativo costumava se comportar assim, minha solução era remover as versões exatas para baixar do meu Gemfile e, em seguida, agrupar novamente e implantar.
gem 'rails_admin', :git => 'git://github.com/sferik/rails_admin.git', :branch => 'master'
para
gem 'rails_admin'
Ou você pode fazer o que ele sugere e enviar seu projeto do servidor de produção para uma máquina local, empacotá-lo e, em seguida, colocá-lo novamente no servidor. Esta solução pode não ser 100% correta, mas algumas delas funcionaram para mim ... apenas pensei em compartilhar. Boa sorte
fonte
--deployment
sinalizador não fazia diferença, a menos que eu excluía o Gemfile.lock. É assim que deveria ser?Outra causa do erro:
Isso é um pouco tolo, mas tenho certeza de que outra pessoa cometerá o mesmo erro.
Para Rails 4, Heroku adicionou o gem rails_12factor. Se você estava usando antes de adicioná-lo, você terá estas duas joias:
gem 'rails_log_stdout', github: 'heroku/rails_log_stdout' gem 'rails3_serve_static_assets', github: 'heroku/rails3_serve_static_assets'
Você deve removê-los ao adicionar um novo. (eles estão incluídos). Acho que você pode se safar até tocar nas linhas do seu arquivo de gemas, então o Heroku percebe a duplicação e grita com o erro acima.
boa sorte com Rails 4.
fonte
Em nosso caso, estávamos usando um recurso que não estava disponível em uma versão antiga do bundler que rodava em nossa máquina de produção. Portanto, bastou atualizar o bundler, ou seja, fazer um
gem update bundler
.fonte
Isso pode ser uma ideia perigosa, mas se for absolutamente necessário testar algo em um ambiente de implantação de produção, você pode editar o arquivo .bundle / config
# This value is normally '1' # Set it to '0' BUNDLE_FROZEN: '0'
Agora invoque bundle, no meu caso, eu precisava atualizar uma gema específica, então este é o meu comando
RAILS_ENV=production bundle update <whatever gem>
Você provavelmente deve alterá-lo de volta após a atualização, para que as coisas funcionem como o esperado depois. Novamente, isso provavelmente não é compatível e YMMV
fonte
Corri para implantar um aplicativo Nesta depois de algumas atualizações de gem. O que funcionou para mim foi excluir o Gemfile.lock , executar
bundle install
para gerá-lo novamente e implantar novamente.fonte
Eu tive um problema semelhante, mas fiz ambos
bundle install
ebundle update
e Heroku ainda rejeitou o meu impulso.Corrigi o problema apenas excluindo Gemfile.lock e executando
bundle install
novamente. Em seguida, adicionei, cometi e enviei para meu repositório git. Depois disso, não tive nenhum problema em empurrar para Heroku.fonte
para heroku, você não precisa alterar a sintaxe no
Gemfile
. você pode apenas adicionarBUNDLE_GITHUB__HTTPS
(observe o sublinhado duplo) como uma variável de ambiente e defini-la comotrue
(no painel do aplicativo heroku naSettings
guia daConfig Vars
seção). isso mudará o protocolo degit://
parahttps://
para todas essas solicitações.fonte
Recebi a mensagem de erro ao tentar enviar para o Heroku. Eu encontrei a seguinte solução corrigida.
fonte
Esse problema pode estar relacionado a submódulos que apontam para versões antigas do código. Para mim, resolvi esse problema atualizando meus submódulos
Se você tiver submódulos, tente executar:
git submodule update --init
bundle install
fonte
Após este comando, você pode fazer a instalação normal do pacote novamente:
bundle install --no-deployment
fonte
Eu li uma dúzia de soluções em diferentes recursos, mas não encontrei exatamente o que poderia me ajudar nesta situação
Então, encontrei uma solução. Exatamente dizendo que li a mensagem de erro com atenção e que havia uma solução: execute a instalação do pacote em outro lugar . "Elsewhere" foi minha Cloud9, onde desenvolvi meu aplicativo. Então meus passos
rsync
comandobundle install
. neste caso, você terá uma mudança versão de Gemfile.lockrsync
bundle install --deployment --without development test
DONE! Deseje BOA sorte para todos!fonte