O Rails 4:Capistrano ambiente de desenvolvimento em vez de produção?
-
21-12-2019 - |
Pergunta
Estou a implementar o ambiente de produção do meu ruby on rails application com o capistrano gem para um servidor virtual privado.Eu execute o seguinte comando para implantar:
bundle exec cap production deploy
Tudo parece estar funcionando bem, a menos que eu tente verificar o ambiente que o meu atual versão de produção está operando.
O jeito que eu uso para verificar se este está em execução:
rails console
Rails.env
A resposta que recebe é "desenvolvimento", o que é bastante assustador.
Em outro teste:quando eu executar o seguinte na minha versão atual:
rails db
Eu recebo um erro que indica que mydatabase_development não é criado.
Meu aplicativo parece estar funcionando bem, mas eu não sei se isso vai causar grandes problemas.Primeiro de tudo:Existe uma maneira de determinar se eu a minha cópia é, na verdade, executando em desenvolvimento?Em segundo lugar:Considerando que eu tenho um problema, como faço para configurar o capistrano para implantar um ambiente de produção?
Solução
Tenha em mente que rails console
se envolve no ambiente atual, como ditado pela RAILS_ENV
ou RACK_ENV
em seu ambiente.Se você não definir explicitamente em seu servidor, em seguida, ele provavelmente irá padrão para development
.
Uma maneira de corrigir isso é para forçá-lo em sua .bash_profile
ou seja o shell de perfil que você está usando.Por exemplo:
export RAILS_ENV=production
Que deve torná-lo disponível e quando você se envolver o Rails shell vai chutar corretamente.
Como uma nota, você não deve mesmo ser capaz de iniciar no modo de desenvolvimento no seu servidor de produção, pois não deve ser uma entrada com o nome no config/database.yml
.Uma melhor prática é armazenar config/database.yml
apenas no servidor de produção e afastá-lo durante a sua Capistrano implantar.
Adicione isso ao seu config/deploy.rb
:
set :linked_files, %w[
config/database.yml
]
Em seguida, você criar uma produção de apenas config shared/config/database.yml
que será vinculado no lugar quando você implantar.Certifique-se de excluir config/database.yml
a partir de seu sistema de controle de versão, para não ficar implantado.
O motivo pelo qual seu site está provavelmente certo é porque um lançador como Passageiro define automaticamente RACK_ENV
para production
a menos que configurado de outra forma.Este não é o impacto de seu shell, porém, que assume a development
.