Por que o Docker não me deixa utilizar o Bundler?


Por que o Docker não me deixa utilizar o Bundler?

Ao iniciar os estudos em novas tecnologias é costumeiro existir alguns problemas, coisas que normalmente você não percebe, pois é algo que provavelmente já está no automático.

Hoje vamos falar do bundle que é muito utilizado na linguagem Ruby para gerenciar gems.

Para programadores que utilizam Ruby todos os dias, isso já está no automático e então passa despercebido. Ao trocar o ambiente de desenvolvimento para Docker e ter a necessidade de utilizar do bundle para atualizar as gems, se deparam com um erro:

Don't run Bundler as root. Bundler can ask for sudo if it is needed, and
installing your bundle as root will break this application for all non-root
users on this machine.
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`.

Então o programador já fica assim:

oh_shit_supernatural.gif

O que é?

Não se preocupe! Isso é apenas um bloqueio para que você não altere o arquivo Gemfile.lock. Por exemplo, acabar adicionando uma nova gem, ou uma gem que você não bloqueou, atualize. 

Por que isto acontece?

Então você deve pensar se a gem deverá ser atualizada, ou não.  Se o criador da gem não tomar devido cuidado com o aumento de versão da gem, ela poderá quebrar toda sua aplicação e esse bloqueio vai te alertar de uma possível atualização. Você vai verificar o que está acontecendo e, então, prosseguir com menos chances deste problema te afetar no futuro.

Como resolver?

Para resolver, você pode rodar dentro do container Docker o comando:

bundle config frozen 0

Aqui você define o desbloqueio do Gemfile.lock. Mas não esqueça que, se você destruir o container Docker e recria-lo, você terá que desbloquear novamente o  Gemfile.lock executando o comando novamente, pois o container Docker é imutável. Se você utiliza do docker-compose então no arquivo Dockerfile você poderá colocar apenas uma linha de código para executar sempre que criar o container.

RUN bundle config --global frozen 0

Assim você não vai mais esbarrar com este bloqueio.

Gostou? Então não perca nenhum post, assine nosso blog!




Por
16/02/2017

 


Assine nosso blog

Não perca nenhuma novidade!

Assine nosso blog

Não perca nenhuma novidade!