Reapresentando o Hello World para faastRuby - A Plataforma Serverless para Ruby e Crystal - Parte I.
Tags: ruby, crystal, faastruby, serverless
Published: 2019-03-30 18:37:48

---
title: Reapresentando o Hello World para faastRuby - A Plataforma Serverless para Ruby e Crystal - Parte I. 
published: true
description: 
tags: ruby, crystal, faastruby, serverless
---
 
![alt text](https://faastruby.io/wp-content/uploads/2019/03/logo-negative-1.png "faastRuby logo")

Olá amigos developers! Quero compartilhar com vocês uma das tecnologias mais emergentes para computação em nuvem. Estou falando de "Funções como Serviço" ou FaaS. Neste artigo, quero que vocês explorem comigo uma solução introdutória. Vamos construir uma função Serverless, passo a passo, usando a plataforma [faastRuby](https://www.faastruby.io), e disponibilizaremos a solução na nuvem.

Se você não estiver familiarizado com esses termos, não se preocupe, eu descrevi mais sobre [faastRuby](https://www.faastruby.io), FaaS e Serverless neste artigo em [português](https://onebitcode.com/faastruby-serverless-ruby/) e aqui em [inglês](https://faastruby.io/blog/building-a-simple-landing-page-with-faastruby-functions/).

A plataforma [faastRuby](https://www.faastruby.io) é incrível e nos permite trabalhar de maneira fácil com funções sem servidor. A plataforma é intuitiva e muito parecida com o Heroku, onde toda a infraestrutura do servidor é abstraída.

Para saber mais sobre esta plataforma, visite o website da empresa criadora do faastRuby: [https://www.faastruby.io](https://www.faastruby.io)

Vamos lá!

## Introdução

A plataforma faastRuby foi atualizada e houve melhorias após a versão 0.5, portanto precisei reescrever o Hello World. Este artigo é uma atualização do artigo anterior. É um tutorial para construir um projeto básico usando os novos recursos.

### Entendendo a Plataforma

**faastRuby** é uma plataforma de desenvolvimento de software serverless para Ruby e Crystal e é composta de dois componentes principais.

#### Componentes Principais

1. **faastRuby Cloud** - é a plataforma para onde vão os deploys e onde ficam seus aplicativos e funções.
2. **faastRuby Local** - um SDK (software development kit) que permite desenvolver e testar aplicativos web e APIs na máquina local e implantar um aplicativo como um conjunto de funções distribuídas na plataforma. Operações de deploy ou de infraestrutura não são requeridos.

#### Conceitos básicos: **Account, Project, Function e Workspace**

1. **Account** - É necessário ter uma conta para usar a plataforma faastRuby. Cada conta pertence a uma pessoa ou uma empresa, que deve se identificar com seu email, senha e um token, que será gerado.
2. **Function** - É onde fica a solução em forma de código fonte. As funções são independentes umas das outras. Para Ruby e Crystal usamos métodos como funções.
3. **Project** - Projeto é onde fica a aplicação. O projeto terá uma pasta principal, terá subpastas, arquivos estáticos e funções.  
4. **Workspace** - São espaços ou ambientes isolados na nuvem. Os deploys tem como destino as Workspaces e é lá onde ficam as functions. Workspaces são representados por uma URL do tipo: 
[https://projectName-environment-abs123.tor1.faast.cloud]().
 

#### Detalhando uma URL de Workspace

Exemplo [https://projectName-environment-abs123.tor1.faast.cloud]().

* **projectName**: Nome dado ao projeto.
* **environment**: Stage é o ambiente default. Você pode escolher outro como prod, dev, etc.
* **abs123**: Identificador único e gerado automaticamente para cada projeto. Não deve ser mudado.


## O que vamos criar?
Usando a plataforma faastRuby, vamos criar duas funções em Ruby e disponibilizá-las rapidamente na internet.


## Ferramentas que vamos precisar
* **ruby 2.6.0**
* **gem faastruby**

## Passo a Passo da Criação do Projeto

### Instalação

Crie uma pasta própria para projetos faastRuby e entre dentro dela. Isto não é obrigatório. Eu prefiro usar esta organização de pastas, assim todos projetos feitos em faastRuby ficam dentro desta pasta.

```Bash
$ mkdir faastruby
$ cd faastruby
```

Execute este passo se você usa o gerenciador de versões Ruby, [RVM](https://rvm.io):
```Bash
$ faastruby/> rvm use ruby-2.6.0@faastruby --ruby-version --create
```

#### Instale a gem

Se você nao tem a gem instalada, faça:
```Bash
$ faastruby/> gem install faastruby
```
Se você já tem a gem faastruby instalada, apenas atualize:
```Bash
$ faastruby/> faastruby update
```

Para saber se a instalação funcionou, consulte a versão da gem faastruby. Sua versão pode ser mais nova, já que a gem está sendo atualizada com frequência.

```Bash
$ faastruby/> faastruby -v
0.5.21
```

### Registrando-se na Plataforma

```Bash
$ faastruby/> faastruby signup

Welcome to FaaStRuby! Please enter your email address:
Email: you@your-email.com

```

Depois de entrar com seu email, será solicitada a senha. 

```Bash
Now type in a password. 
It must contain 8 to 50 characters and have at least 
one uppercase letter, one lowercase letter, 
one number and one special character @ $ ! % * ? &
************
✔ Creating your account...
```

Em seguida, você receberá um email com um token para confirmação. Copie e cole o token no campo indicado abaixo.

```Bash
You should have received an email with a confirmation token.
If you didn't receive an email:
- Make sure you sign up with the correct email address
- The system won't send an email if you account status is already 'confirmed'
Confirmation Token: <<< seu token aqui >>>
```
Em sequência você estará registrado e logado na plataforma. 

```Bash
✔ Confirming your account...
Login successful!
```

Da próxima vez que você precisar se logar use o comando:

```Bash
$ faastruby/> faastruby login       
Email: you@your-email.com
Password: ***********
Login successful.
```

E quando você precisar se deslogar pode usar:

```Bash
$ faastruby/> faastruby logout ## use --all para deslogar de todas máquinas
Logout successful.
```

#### Este artigo continua na [Parte II](https://dev.to/sergiosouzalima/reapresentando-o-hello-world-para-faastruby-a-plataforma-serverless-para-ruby-e-crystal-parte-ii-31c5) onde começaremos com a criação do projeto.