Eu anteriormente postei instruções há um ano sobre como fazer isso em trilhos 4.1 em uma versão antiga do Elans Beanstalk. Esta é a versão atualizada.
A implantação de aplicativos Rails pode ser complicada. Para projetos simples, ferramentas como o Heroku podem ser perfeitas. É ótimo para protótipos de aplicativos e testar idéias diferentes sem muita dificuldade. No entanto, quando seu projeto se torna mais complicado e você quer ter um melhor controle de seus servidores, balanceadores de carga, trabalhadores, condições de escala automática, etc., você não terá a flexibilidade que deseja.
Existem muitos serviços que podem ser usados ??para obter um aplicativo Rails funcionando rapidamente, mantendo o controle total de sua infraestrutura. Uma opção razoável é o Elastic Beanstalk da Amazon. O serviço é apropriadamente descrito pela Amazon da seguinte forma:
O AWS Elastic Beanstalk torna ainda mais fácil para os desenvolvedores implantar rapidamente e gerenciar aplicativos na nuvem AWS. Os desenvolvedores simplesmente carregam sua aplicação e o Elastic Beanstalk administra automaticamente os detalhes de implementação do provisionamento de capacidade, balanceamento de carga, auto-dimensionamento e monitoramento de saúde de aplicativos.
Agora que a Amazon suporta o PostgreSQL via RDS com um aplicativo Rails totalmente gerenciado com versões anteriores, nunca foi tão fácil!
Você pode encontrar todo o código para esta postagem em github.com/jtescher/example-rails-4.2-lastic-beanstalk-blog
Se você ficar preso ou ter outras questões, a documentação para Elastic Beanstalk é muito boa.
Começando
Inscreva-se para uma conta AWS através das instruções no AWS Console e, em seguida, baixe as Ferramentas de linha de comando Elastic Beanstalk via Homebrew (ou aqui para PC).
$ brew update
$ brew install aws-elasticbeanstalk
Inicialize o aplicativo Rails
A versão mais atual dos trilhos no momento desta escrita é 4.2.1, então é isso que vamos usar agora.
$ gem install rails -v 4.2.1
$ rails novo blog
$ cd blog
$ git init && git add -A && git commit -m "Adicionar rails scaffold"
Scaffold a Post recurso
Nós estaremos criando um aplicativo de exemplo simples que permite manipular posts. Para gerar isso no uso do Rails:
$ rails geram título do post do andaime: corpo da corda: texto
$ bundle exec rake db: migrate
$ git add -A && git commit -am "Adicionar recurso de publicação"
Inicialize o aplicativo Elastic Beanstalk
Agora, podemos inicializar um novo aplicativo Beanstalk através do comando eb.
$ eb init
Eu escolheria as seguintes configurações, mas para uma descrição de cada opção, veja o exemplo AWS aqui .
Selecione uma região padrão
3) us-west-2: US West (Oregon)
Selecione um aplicativo para usar
[Criar nova aplicação]
Digite o nome da aplicação
blog
O blog de aplicativos foi criado.
Parece que você está usando Ruby. Isso é correto?
(y / n): y
Selecione uma versão da plataforma.
1) Ruby 2.2 (Puma)
Deseja configurar SSH para suas instâncias?
(y / n): n
Isto irá configurar um diretório .elasticbeanstalk na raiz do seu projeto e adicioná-lo ao seu arquivo .gitignore. Você não deseja que sua configuração seja armazenada em git porque pode haver informações privadas lá. Vamos cometer essas mudanças agora:
$ git commit -am "Ignore elasticbeanstalk settings"
Criando o ambiente Elastic Beanstalk
Você pode ter muitos ambientes por aplicação Elastic Beanstalk. Isso pode ser útil para ter tanto dev e ambientes de produção para o mesmo aplicativo.
Para criar um novo ambiente, execute o seguinte:
$ eb create blog-env:
Criando o arquivo de versão do aplicativo "b303".
Fazendo upload de blog / b303.zip para S3. Isso pode demorar um pouco.
Envio completo.
Detalhes do ambiente para: blog-env
Nome do aplicativo: blog
Região: us-west-2
Versão implementada: b303
ID do ambiente: e-g5mkeawrnz
Plataforma: 64 bits Amazon Linux 2015.03 v1.3.0 rodando Ruby 2.2 (Puma)
Nível: WebServer-Standard
CNAME: DESCONHECIDO
Atualizado: 2015-04-19 23: 38: 50.955000 + 00: 00
Status de impressão:
INFO: createEnvironment está começando.
INFO: usando elasticbeanstalk-us-west-2-83376862866 como balde de armazenamento Amazon S3 para dados de ambiente.
INFO: balanceador de carga criado chamado: awseb-eg-AWSEBLoa-7R0CSEMQ6W2M
INFO: grupo de segurança criado chamado: awseb-e-g5mkeawrnz-stack-AWSEBSecurityGroup-56IUD2ZYQ5FR
INFO: configuração de inicialização de Auto Escalada criada chamada: awseb-e-g5mkeawrnz-stack-AWSEBAutoScalingLaunchConfigurat ...
INFO: grupo de escala automática criado chamado: awseb-e-g5mkeawrnz-stack-AWSEBAutoScalingGroup-2URXDKL0NCIJ
INFO: aguardando instâncias EC2 para iniciar. Isso pode levar alguns minutos.
INFO: política de grupo de Auto escalada criada chamada: arn: aws: autoscaling: us-west-2: 833768628226: scalingPolicy: 02920f8b ...
INFO: política de grupo Auto escalação criada chamada: arn: aws: autoscaling: us-west-2: 833768628666: scalingPolicy: b143cea1 ...
INFO: criou o alarme CloudWatch chamado: awseb-e-g5mkeawrnz-stack-AWSEBCloudwatchAlarmHigh-APCUnlMHNIS1
INFO: criou o alarme CloudWatch chamado: awseb-e-g5mkeawrnz-stack-AWSEBCloudwatchAlarmLow-1UL48B2CC2OM8
INFO: Adicionou a instância EC2 'i-7f4b6eb7' ao grupo de escala automática 'awseb-e-g7mkeawrnz-stack-AWSEBAutoScalingGroup-2URX ...
INFO: Aplicação disponível em blog-env-zckzptpdgy.elasticbeanstalk.com.
INFO: ambiente com sucesso: blog-env
O ambiente agora deve estar em execução. Para ver o status e o URL:
$ eb status
Detalhes do ambiente para: blog-env
Nome do aplicativo: blog
Região: us-west-2
Versão implementada: b303
ID do ambiente: e-g5mkeawrn
Plataforma: 64 bits Amazon Linux 2015.03 v1.3.0 rodando Ruby 2.2
Nível: WebServer-Standard
CNAME: blog-env-zckzptpdg2.elasticbeanstalk.com
Atualizado: 2015-04-19 23: 51: 59.259000 + 00: 00
Status: pronto
Saúde: Verde
A última coisa que temos que fazer para criar o Rails é adicionar uma variável de ambiente SECRET_KEY_BASE .
Para gerar um novo uso de chave secreta:
$ rake secret
f655b5cfeb452e49d9182c6b5e6856704e6e1674082fa1e5f1a330782bad1833ba4cc30951e094f9250c87573dc0bbd3d46d37c5d79ff57 ...
Então, para adicionar o segredo ao seu ambiente de feijão de feijão elástico, use:
$ eb setenv SECRET_KEY_BASE = f655b5cfeb452e49d9182c6b5e6856704e6e1674082fa1e5f1a330782bad1833ba4cc30951e094f9250 ...
Agora, se você navegar para [YOUR-ENV] .elasticbeanstalk.com / posts, você deve ver sua visualização de índice de postagens:
Usando o PostgreSQL com Rails
Agora, nosso aplicativo está apenas usando o SQLite, que não é feito para uso de produção e não pode ser compartilhado entre instâncias. Podemos resolver isso adicionando o PostgreSQL ao seu aplicativo e ao seu ambiente Elastic Beanstalk.
Adicionando a gema pg
Abra seu Gemfile. Mova a jóia sqlite3 para o seu bloco de desenvolvimento e teste e adicione um grupo de produção com a gema pg nele. Depois, deve parecer algo assim:
fonte 'https://rubygems.org'
# Bundle Edge Rails em vez disso: gem 'rails', github: 'rails / rails'
gem 'rails', '4.2.1'
# Use SCSS para folhas de estilo
gem 'sass-rails', '~> 5.0'
# Use Uglifier como compressor para recursos de JavaScript
gem 'uglifier', '> = 1.3.0'
# Use o CoffeeScript para recursos e vistas do .coffee
gem 'coffee-rails', '~> 4.1.0'
# Veja https://github.com/rails/execjs#readme para mais tempos de execução suportados
# gem 'therubyracer', plataformas:: ruby
# Use jquery como a biblioteca de JavaScript
gem 'jquery-rails'
# Turbolinks faz os seguintes links em seu aplicativo da Web mais rápido. Leia mais: https://github.com/rails/turbolinks
gem 'turbolinks'
# Crie as APIs JSON com facilidade. Leia mais: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 2.0'
# bundle exec rake doc: trilhos gera a API em doc / api.
gem 'sdoc', '~> 0.4.0', grupo:: doc
# Use ActiveModel has_secure_password
# gem 'bcrypt', '~> 3.1.7'
# Use Unicorn como o servidor de aplicativos
# gem 'unicorn'
# Use Capistrano para implantação
# gem 'capistrano-rails', grupo:: desenvolvimento
grupo: desenvolvimento,: teste fazer
# Use sqlite3 como o banco de dados do registro ativo
gem 'sqlite3', '~> 1.3.10'
# Ligue 'byebug' em qualquer parte do código para parar a execução e obter um console de depuração
gem 'byebug'
# Acesse um console IRB em páginas de exceção ou usando <% = console%> em visualizações
gem 'web-console', '~> 2.0'
# Spring acelera o desenvolvimento ao manter seu aplicativo executado em segundo plano. Leia mais: https://github.com/rails/spring
gem 'primavera'
fim
grupo: produção
# Use o PostgreSQL como o banco de dados do Registro ativo
gem 'pg', '~> 0,18,1'
fim
Agora execute $ bundle install para instalar a jóia.
Configurando database.yml para trabalhar com RDS postgres
As credenciais de banco de dados nunca devem ser codificadas e o Beanstalk Elástico torna as configurações como variáveis ??de ambiente bastante simples. As variáveis ??RDS são configuradas e atualizadas automaticamente para que sua seção de produção de config / database.yml possa ser atualizada para o seguinte:
Produção:
<<: * padrão
adaptador: postgresql
codificação: unicode
banco de dados: <% = ENV ['RDS_DB_NAME']%>
nome de usuário: <% = ENV ['RDS_USERNAME']%>
senha: <% = ENV ['RDS_PASSWORD']%>
host: <% = ENV ['RDS_HOSTNAME']%>
porta: <% = ENV ['RDS_PORT']%>
Obtendo a gema pg para trabalhar em Elastic Beanstalk
Agora vamos adicionar o banco de dados ao nosso ambiente. Isso leva alguns passos, mas eu vou passar por você. Primeiro vá para a seção Elastic Beanstalk no console AWS: console.aws.amazon.com/elasticbeanstalk/?region=us-west-2 (Observe que a região é us-west-2, se você implantou em uma região diferente, verifique há.)
Agora, clique em blog-env e vá para a configuração no navegador esquerdo. Na parte inferior, você deve ver:
Agora, clique em "criar um novo banco de dados RDS", configure o DB Engine para "postgres" e crie um nome de usuário mestre e uma senha mestra.
Clique em "Salvar" e você terá uma instância do PostgreSQL totalmente funcional e as variáveis ??de ambiente terão sido adicionadas automaticamente ao seu ambiente Beanstalk.
Agora, para instalar a gema pg em seu servidor, o pacote postgresql93-devel yum é necessário. Configurar pacotes em instâncias Elastic Beanstalk é tão simples como deixar um arquivo .config formatado com YAML em uma pasta .ebextensions de nível superior.
# .ebextensions / packages.config
pacotes:
yum:
postgresql93-devel: []
Agora, cometer essa alteração e redistribuir o aplicativo.
$ git add -A && git commit -am "Adicionar o PostgreSQL como banco de dados de produção"
$ eb deploy
Uma vez feito isso, você pode recarregar a página / posts e ver seu aplicativo Rails totalmente gerenciado com os postgress! Hooray!