--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
$ 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
$ 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é)
--Créer un canal avec l'API de messagerie
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
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