[RUBY] Déployer le bot Line avec rails5 + Docker + Heroku Note

Cible

--Construire un environnement de développement RubyonRails5 (RoR) avec docker-compose --Déployer sur Heroku --Créez une nouvelle chaîne avec LINE DV ELOPERS --Création du BOT de retour de perroquet

Conditions préalables

Construction de l'environnement de développement RoR

$ mkdir Linebot
$ cd Linebot
$ vi Dockerfiles

Dockerfile


# ruby2.3.Exécutez la commande suivante sur la couche d'image de 3 Déclaration
FROM ruby:2.3.3
# apt-get est comme un gestionnaire de paquets
#Mettre à jour la liste avec la mise à jour et installer les packages requis
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs

#Créer et définir un répertoire de travail
RUN mkdir /app_name 
##APP le nom du répertoire de travail_Attribuer à ROOT et$APP_Référence avec ROOT
ENV APP_ROOT /app_name 
WORKDIR $APP_ROOT

#Ajouter Gemfile côté hôte (local)
ADD ./Gemfile $APP_ROOT/Gemfile
ADD ./Gemfile.lock $APP_ROOT/Gemfile.lock

#Installation du bundle Gemfile
RUN bundle install
ADD . $APP_ROOT
$ vi docker-compose.yml

docker-compose.yml


version: '3'
services:
  db:
    image: postgres:13.0
    environment:
      POSTGRES_PASSWORD: 'postgres'
    ports:
      - "3306:3306"

  web:
    build: .
    command: rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/app_name
    ports:
      - "3000:3000"
    depends_on:
      - db

Démarrez un conteneur appelé web et db

$ touch Gemfile.lock
$ vi Gemfile

Gemfile


source 'https://rubygems.org'
gem 'rails', '~> 5.2.2'
$ docker-compose run app rails new . --force --database=postgresql --skip-bundle
$ docker-compose build -d
$ docker-compose up -d web

L'option -d démarre en mode détachement (s'exécute sur le backend sans journalisation) Si vous voulez voir le journal, vous pouvez le supprimer, mais si vous l'arrêtez, le conteneur s'arrêtera également, donc c'est gênant

/config/database.yml


default: &default
  adapter: postgresql
  encoding: unicode
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  host: db
  username: postgres
  password: postgres
....
production:
  <<: *default
  database: app_name_production
  username: postgres
  password: <%= ENV['APP_NAME_DATABASE_PASSWORD'] %>

Ecrivez que postgresql sera utilisé dans le développement et la production Lorsque vous utilisez Heroku, qui sera décrit plus tard, postgresql est la norme, donc c'est bien. Eh bien, vous pouvez utiliser MySQL

Gemfile


#Pour l'API LINE
gem 'line-bot-api'

#Pour gérer les jetons d'accès, etc.(Gestion des variables d'environnement)
gem 'dotenv-rails'

#postgresql pour l'environnement heroku
gem 'pg'
$ docker-compose run web bundle install
$ docker-compose run web rails db:create
$ docker-compose run web rails g controller top index
$ docker-compose run web rails g controller linebot collback

Je me fâcherai si je ne crée pas de base de données Heroku a besoin d'un écran supérieur, alors faisons tout pour le moment (Je ne pense pas qu'il soit bon de jouer directement avec le volume, pas seulement des commandes, mais de l'ignorer)

routes.rb


post '/callback' => 'linebot#callback'
root 'top#index'

/app/controllers/linebot_controller


class LinebotController < ApplicationController
    require 'line/bot'  # gem 'line-bot-api'

  #Désactiver l'authentification par jeton CSRF pour l'action de rappel
  protect_from_forgery :except => [:callback]

  def client
    @client ||= Line::Bot::Client.new { |config|
      config.channel_secret = ENV["LINE_CHANNEL_SECRET"]
      config.channel_token = ENV["LINE_CHANNEL_TOKEN"]
    }
  end

  def callback
    body = request.body.read

    signature = request.env['HTTP_X_LINE_SIGNATURE']
    unless client.validate_signature(body, signature)
      head :bad_request
    end

    events = client.parse_events_from(body)

    events.each { |event|
      case event
      when Line::Bot::Event::Message
        case event.type
        when Line::Bot::Event::MessageType::Text
          message = {
            type: 'text',
            text: event.message['text']
          }
          client.reply_message(event['replyToken'], message)
        when Line::Bot::Event::MessageType::Image, Line::Bot::Event::MessageType::Video
          response = client.get_message_content(event.message['id'])
          tf = Tempfile.open("content")
          tf.write(response.body)
        end
      end
    }

    head :ok
  end
end
$ touch .env

.env


LINE_CHANNEL_SECRET=XXXXXXXXXXX
LINE_CHANNEL_TOKEN=XXXXXXXXXXX

Pour XXXXXXXXXXX, écrivez le gars Line Developers que vous créerez plus tard. Si vous souhaitez déposer un conteneur local $ docker-compose down OK si vous le faites avec Si vous le déposez avec Ctl + C $ rm tmp/pids/server.pid Il vaut mieux faire

Déployer sur Heroku

$ vi heroku.yml

heroku.yml


build:
  docker:
    web: Dockerfile
run:
  web: bundle exec puma -C config/puma.rb

Vous ne pouvez pas construire sans écrire ceci Il semble que heroku.yml puisse basculer le développement / la production et la base de données qui l'accompagne (pas fait)

$ heroku login
$ heroku create
$ heroku addons:create heroku-postgresql:hobby-dev
$ heroku container:login
$ heroku container:push web
$ git init
$ heroku git:remote -a <Le nom de votre référentiel heroku>
$ git add .
$ git commit -am "Bon commentaire"
$ heroku stack:set container
$ git push heroku master
$ heroku container:release web
$ heroku open

Si vous ne pouvez pas couper la branche, vous pouvez ajouter et valider comme git et mettre à jour avec heroku push. Ici, la poussée du conteneur et la poussée de l'image sont encombrées, il vaut peut-être mieux ne pas trop imiter

――Lorsque quelque chose ne va pas avec le serveur $ heroku restert Tu devrais essayer de frapper --Lorsque vous souhaitez consulter le journal $ heroku logs --tail Déo k --Si vous souhaitez voir les fichiers sur le serveur $ heroku bash Il est bon de le voir en appuyant sur la commande cat avec (le point de colère est que vim ne peut pas être utilisé)

Connect Line canaux et conteneurs

--Créer un canal avec l'API de messagerie

prime

Je veux tester mais je ne veux pas déployer! Je veux le publier localement! Vous pouvez utiliser ngrok

Je souhaite envoyer une demande de vérification pour le moment! Utiliser Talend API Tester

Articles pris en charge

LINE Bot Development Super Introduction (Partie 1) De zéro à la réponse https://qiita.com/nkjm/items/38808bbc97d6927837cd

Créez une application Rails basée sur des conteneurs avec Docker Compose et déployez-la sur Heroku https://qiita.com/akirakudo/items/16a01271b0a39316e439

Construction de l'environnement Rails5 + MySQL sur Docker par Docker-compose trop poli (Docker pour Mac) https://qiita.com/azul915/items/5b7063cbc80192343fc0

Recommended Posts

Déployer le bot Line avec rails5 + Docker + Heroku Note
Déployer sur heroku avec Docker (Rails 6, MySQL)
J'ai créé un robot LINE avec Rails + heroku
[Rails] Transmission push avec LINE Bot
Déployer des rails sur Docker vers heroku
heroku: docker: déployer
Déployez heroku avec Rails6 (Cloud9 + Ubuntu) + MySQL
Déployer avec EC2 / Docker / Laravel
Exécuter des rails à chaque fois dans le docker
[Docker] Construction de l'environnement Rails 5.2 avec docker
[Docker] À utiliser à tout moment avec Docker + Rails
Déployer l'image Docker de Flask sur Heroku
[Construction de l'environnement avec Docker] Rails 6 et MySQL 8
Construction d'environnement de rails avec Docker (apocalypse personnelle)
Construction de Rails 6 et environnement PostgreSQL avec Docker
Construire un environnement Rails 6 + MySQL avec Docker compose
déployer heroku
Déployer sur Heroku [Ruby on Rails] Débutant
Déployez l'application avec VPC + EC2 + Docker.
bot de ligne
[LINE BOT] J'ai créé un Ramen BOT avec Java (Maven) + Heroku + Spring Boot (1)
Comment créer un environnement Rails 6 avec Docker
Présentation de Rspec avec Ruby on Rails x Docker
Déployer des rails sur ECS Fargate avec AWS Copilot
Erreur lors du déploiement de rails5 + Mysql sur heroku avec Docker-compose
[Rails] Comment créer un environnement avec Docker
Facile à créer LINE BOT avec Java Servlet
Facile à afficher Hello World avec Rails + Docker
Notez que je suis resté bloqué lors de la création d'un robot LINE de retour de perroquet avec Heroku + Sinatra
Rails Docker-Partie 1-
Rails Docker ~ Partie 2 ~
Comment déployer à partir d'une image Docker locale vers Heroku
Faisons un Bot LINE avec Ruby + Sinatra - Partie 2
Erreur rencontrée avec les notes lors du déploiement de docker sur des rails
[Note] Créez un environnement Java à partir de zéro avec docker
Faisons un Bot LINE avec Ruby + Sinatra - Partie 1
Environnement Build Rails (API) x MySQL x Nuxt.js avec Docker