djangoの最初とサーバ起動まで
表記の件において復習の為アウトプット。
●djangoとは、、
pythonにおける代表的なWEBフレームワーク。
python言語においてWEBアプリなどが作成できるアイテムという解釈
なお、こちらのフレームワークはpipによってインストールする。
> pip install django
●pipとは
ライブラリ管理用のツール。
PyPIというサードパーティーライブラリよりインストールが簡単にできる。
こちらのpipはpython3.4以上であればプリインストールされている。
pip listにて一覧が確認できる為、djangoインストール後は確認できる。
●プロジェクトの作成
所定のディレクトリに移動して以下のコマンドを入力
> django-admin startproject mysite
mysite/ プロジェクトのルートディレクトリ
manage.py プロジェクトに対する様々な操作を行うコマンドライン
mysite/ プロジェクトの実際のpythonパッケージ
__init__.py Python パッケージであることを知らせるための空のファイル
settings.py Django プロジェクトの設定ファイル
urls.py Django プロジェクトの URL 宣言、目次
asgi.py ASGI 互換 Web サーバーのエントリポイント
wsgi.py WSGI互換Webサーバーとのエントリーポイント
●サーバの起動
以下のコマンドにてサーバを起動
> python manage.py runserver
その後、下記のURLにてアクセスすると、確認できる
pythonのリスト、辞書と繰り返し処理など
pythonのリストと辞書機能について忘れないように備忘録
●リスト
・リストの追加
appendを使用
例:foods = ["apple","banana","grape"]
foods.append("orange")
print(foods)
>>>foods = ["apple","banana","grape","orange"]
・繰り返し処理
例:foods = ["apple","banana","grape"]
for food in foods:
print(food)
●辞書
・値の更新
foods = {"a":"apple","b":"banana","c":"grape"}
foods["a"] = "orange"
>>> {"a":"orange","b":"banana","c":"grape"}
・値の追加
foods = {"a":"apple","b":"banana","c":"grape"}
foods["d"] = "orange"
>>> {"a":"orange","b":"banana","c":"grape","d":"orange"}
●while文
〜の間繰り返すという条件処理
例:
x=1
while X <= 100:
print(x)
x += 1
結果
1 2 3 4 .... 100
●break
繰り返し処理の途中で強制的に終了する
numbers = [1,2,3,4,5,6]
for number in numbers
print(number)
if number == 3:
break
結果
1 2 3
●continue
条件の処理をスキップする
numbers = [1,2,3,4,5,6]
for number in numbers
print(number)
if number%2 == 0:
continue
print(number)
結果
1 3 5
他にも様々なものがある為、随時覚えていく
dockerイメージの共有について
作成したイメージをdockerで共有するには
●リポジトリの作成
プッシュの為の実行コマンドを確認します
・Docker Hubにログイン
・リポジトリの作成をクリック
・名前を入力(例としてgetting-started)、Publicであることを確認し、作成ボタンをクリック
すると、ページの右側にDockerコマンドというセクションがある。これはリポジトリをプッシュする時に必要なコマンド
●イメージをプッシュ
そのままコマンドを入力してもエラーが出てしまう。
これを避けるために、既存のイメージにタグ付をして別の名前をつける必要がある。
・docker login -u YOUR-USER-NAMEコマンドにてDockerHubにログイン
・docker tagコマンドを使用して、getting-startedイメージに新しい名前を付ける
docker tag 新しい名前 YOUR-USER-NAME/getting-started
・プッシュコマンドを再試行
docker push YOUR-USER-NAME/getting-started
これで共有ができる。
docker起動、更新について
dockerダウンロード後の使用方法について備忘録。
●imageの作成をコンテナの起動
dockerにはimageを用意する必要があるが、2通りある。
・docker hubからの取得
docker pull イメージ名
・Dockerfileの作成
所定のファイルを作成し、textとして自作する。
そこからbuild
docker build -t ビルドしたイメージに付けるイメージ名 .
imageを用意した後にコンテナを作成する
・コンテナの作成
docker create --name コンテナに付ける名前 イメージ名
・コンテナ起動
docker start コンテナ名
●runコマンド
以上のpull create startのコマンドを同時に実行できるのがrunコマンド
docker run イメージ名
●データの更新
アプリなどでソースコードの更新をした後は、
イメージの更新をビルド⇨コンテナを削除⇨新しいコンテナを作成
・イメージの更新をビルド
docker build -t ビルドしたイメージに付けるイメージ名 .
・コンテナを削除
docker ps(コンテナの確認)
docker stop <the-container-id>(コンテナの停止)
docker rm <the-container-id>(コンテナの削除)
・更新したアプリの再起動
docker run -dp 3000:3000
起動後、更新を確認。
dockerの概要、dockerLabs入門について
dockerについての知識がなかった為、備忘録として記載致します。
そもそもdockerとは?
マシン自体のOS上に別のマシンを立ち上げること。
学習する中で進めていき、dockerのインストールの完了後、
dockerLabsのチュートリアルを実施する。
http://localhost/tutorial/#the-command-you-just-ran
こちらにある入門編から。
●コンテナをバックグラウンドで実行
docker run -d -p 80:80 docker/getting-started
●コンテナイメージを構築
・こちらのページよりアプリをインストール
http://localhost/tutorial/our-application/
・アプリのコンテナイメージを構築
アプリ内のjsonファイルと同じ階層以下の内容のDockerfileを作成
※拡張子が付かないように注意
その後ターミナルから先ほどダウンロードしたappディレクトリに移動後
docker buildコマンドにてコマンドイメージをビルド
docker build -t getting-started .
●アプリコンテナの起動
以下のコマンドにて
docker run -dp 3000:3000 getting-started
にアクセスをすると、アプリケーションが開かれる。
コンテナイメージを構築した後、コンテナ(=アプリの実行環境)を起動するというイメージ。
ActionCableをデプロイ時に使用するために
Railsの非同期通信において使用するActionCableにおいて本番環境で使用する際はまた設定が必要な為、備忘録。
●config/cable.ymlにてadapterの設定
adapterとは
サーバーから送信された情報をクライアントへ提供する仕組みと連携するためのもの
adapterにはいくつか種類がある
・Asyncアダプタ 本番環境での利用は非推奨であるが、個人アプリの規模であれば、基本的に問題はない
・Redisアダプタ 本番環境での利用が推奨されているが、EC2を用いたデプロイを行う際に、幾らか料金がかかる
・ PostgreSQLアダプタ 本番環境での利用が推奨されているが、データベースとのやりとりには、PostgreSQLを使用していることが条件
下記のように記載
config/cable.yml
adapter: async
test:
adapter: test
production:
adapter: async
url: <%= ENV.fetch("REDIS_URL") { "redis://localhost:6379/1" } %>
channel_prefix: mini_talk_app_production
●AWSにてデプロイする際の設定
①本番環境の設定ファイルであるconfig/enviroments/production.rbにて設定
config/enviroments/production.rb
Rails.application.configure do
ActionCable.server.config.disable_request_forgery_protection = true
config.action_cable.url = "ws://【Elastic IP】/cable"
config.action_cable.allowed_request_origins = ['http://【Elastic IP】']
end
上記の箇所にElastic IPと共に記載
②Nginxのrails.confを編集
ターミナル、EC2内にて
sudo vim /etc/nginx/conf.d/rails.conf
server内にて以下を追記
location /cable {
proxy_pass http://app_server/cable;
proxy_http_version 1.1;
proxy_set_header Upgrade websocket;
proxy_set_header Connection Upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
こちらの設定後、Nginxの再起動を行う。
sudo systemctl reload nginx
sudo systemctl restart nginx
この処理後、デプロイで反映実施。
Action Cableについてまとめ
RailsのAction Cableについて概要のまとめとして備忘録。
●Action Cableとは
利用にはチャネルが必要
●Channel(チャネル)とは
即時更新機能を実施するサーバ側の仕組みのこと
データの送受信の設定などを行う
・チャネルの作成
messageチャネルを作成するとしたらターミナルにて
rails g channel message
を実施
●message_channel.rbについて
app/channels/message_channel.rbに生成できたファイルについて
このファイルはサーバーとクライアントを繋ぐファイル。stream_fromメソッドを用いることで、サーバーとクライアントの関連付けを設定する。
・stream_from
stream_fromとは、サーバーとクライアントを関連付けるメソッド
app/channels/message_channel.rb
class MessageChannel < ApplicationCable::Channel
def subscribed
stream_from "message_channel"
end
def unsubscribed
# Any cleanup needed when channel is unsubscribed
end
end
stream_fromメソッドで関連付けられるデータの経路のことを、broadcast(ブロードキャスト)と呼ぶ
・broadcast
broadcastとは、サーバーから送られるデータの経路のことを指す
broadcastを介してデータをクライアントに送信する
app/controller/messages_controller.rb
class MessagesController < ApplicationController
def new
@messages = Message.all
@message = Message.new
end
def create
@message = Message.new(text: params[:message][:text])
if @message.save
ActionCable.server.broadcast 'message_channel', content: @message
end
end
end
broadcastを通して、'message_channel'に向けて@messageを送信するという意味送信された情報は、message_channel.jsで受けとる
app/javascript/channels/message_channel.js
import consumer from "./consumer"
consumer.subscriptions.create("MessageChannel", {
connected() {
// Called when the subscription is ready for use on the server
},
disconnected() {
// Called when the subscription has been terminated by the server
},
received(data) {
const html = `<p>${data.content.text}</p>`;
const messages = document.getElementById('messages');
const newMessage = document.getElementById('message_text');
messages.insertAdjacentHTML('afterbegin', html);
newMessage.value='';
}
});
こちらで簡易的な非同期の通信ができる。