แสดงบทความที่มีป้ายกำกับ Tutorial แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ Tutorial แสดงบทความทั้งหมด

วันพุธที่ 10 ตุลาคม พ.ศ. 2561

Tutorial 2 : รายละเอียด แอป ที่เราจะทำ

ที่มาและหลักการ

Project สั่งเมนูอาหารด้วยเสียง

เป้าหมายหลักที่นำไปใช้คือร้านอาหาร ประเภท drive-through
แนวคิดคือ ใช้ machine รับ order แทนมนุษย์



Tutorial 4 : เพิ่มฟังก์ชั่น


ฟังก์ชันใน Service Controller เพิ่มเติมจาก Tutorial 3

จะเพิ่มการสร้าง Bill ขึ้นมาโดยไม่กำหนดตายตัวว่า id ต้องเป็น 1
  soap_action "create_news_order",
              :args => { :a => :integer , :b => :integer, :c => :integer, :d => :integer },
              :return => :string
  def create_news_order
    new_bill = Bill.create_new()
    Order.create_new(params[:a],params[:b],params[:c],params[:d],new_bill.id)
    render :soap => "create order success"
  end

ฟังก์ชันสำหรับดึงวันที่ของ Bill ด้วยการส่ง id ไป
  soap_action "get_bill_by_id",
              :args   => { :id => :integer},
              :return => :string
  def get_bill_by_id
    render :soap =>  ((Bill.find(params[:id]))[:date])
  end


รอเพิ่มเติมที่หลัง find_order_by_id

Tutorial 3 : เริ่มสร้าง App การเพิ่ม Model controller , route

เริ่มจากการเปิดโปรเจค งานก่อน

พิม

rails new appName
เพื่อทำการสร้าง โปรเจ็ค แบบอัตโนมัติขึ้นมาก่อน


และในการที่  เราจะทำ soap application นั้น เราจะใช้ gem wash_out

https://github.com/inossidabile/wash_out

ให้เข้าไปที่

....\appName\Gemfile

ทำการเพิ่ม

 gem 'wash_out'

แล้วเซฟ

แล้วทำการใช้งาน

bundle install

เพื่อโหลด wash_out มาใช้งาน

ทำการสร้างโมเดลใน Ruby On Rails 




ทำการสร้างโมเดล shop แล้ว โดยกำหนด name เป็น string โดยพิมพ์คำสั่ง
heroku run rails g model shop name:string

ทำการสร้างโมเดล bill แล้ว โดยกำหนด dateเป็น dateโดยพิมพ์คำสั่ง และ refences ไปยัง shop ตาม ER Diagram ด้านบน

heroku run rails g model bill date:date shop:references

ทำการสร้างโมเดล orders แล้ว โดยกำหนดชื่อกาแฟเป็น integerโดยพิมพ์คำสั่ง และ references ไปยัง order
heroku run rails g model orders espresso:integer cappuccino:integer latte:integer mocha:integer bill:references

รัน rake db:migrate เพื่อทำการสร้างดาต้าเบส


Routes

จากนั้นไปที่ไฟล์ 

....\appName\config\routes.rb

ทำการเพิ่ม คำสั่งดังนี้

AppName::Application.routes.draw do
wash_out :rumbas
end

โดยที่ AppName ดูได้ที่ไฟล์ application.rb (แล้วแต่การใช้งาน)

และ service ใน แถว wash_out :service 

นั้น คือ ชื่อไฟล์ Controller


Controller

ซึ่งในโฟล์เดอร์

...\appName\app\controllers

สร้างไฟล์ ใหม่ชื่อ service_controller.rb และมีโค้ดดังนี้
class ServiceController < ApplicationController
soap_service namespace: 'urn:WashOut'

soap_action "get_shop_name_by_id",
:args => { :id => :integer},
:return => :string
def get_shop_name_by_id
render :soap => ((Shop.find(params[:id]))[:name])
end

soap_action "create_news_shop",
:args => { :name => :string},
:return => :string
def create_news_shop
Shop.create_new(params[:name])
render :soap => "create news shop success"
end
soap_action "create_news_order",
:args => { :a => :boolean , :b => :boolean, :c => :boolean, :d => :boolean },
:return => :string
def create_news_order
Order.create_new(params[:a],params[:b],params[:c],params[:d],1)
render :soap => "create order success"
end
end

โดย
soap_service namespace: 'urn:WashOut'

เป็น ส่วนที่จำเป็นต้องเพิ่มขึ้นมาเมื่อจะใช้งาน WashOut

และจะสังเกตุได้ว่า ส่วนสำคัญจะมีการกำหนด ดังรูปแบบนี้

soap_action "create_news_order",
:args => { :a => :boolean , :b => :boolean, :c => :boolean, :d => :boolean },
:return => :string
ซึ่งจะเป็นการกำหนดชื่อ soap action และ รูปแบบ input output ต่างๆ เช่นข้างบน จะรับ ตัวแปร 4 ตัว
เป็น ค่าความจริง เท่านั้น ทั้งหมด และ คืนค่าเป็น string กลับไป

นั้นเอง

และ จะมีส่วนสำคัญอีกส่วนคือ

render :soap => "create order success"
เพื่อคืนค่า ใน รูปแบบ soap กลับไปให้ผู้ที่ร้องขอมา

ในส่วนของ ฐานข้อมูลนั้น

Models

ในไฟล์ models/order.rb
class Order < ApplicationRecord
belongs_to :bill

def self.create_new(a,b,c,d,i)
Order.create( :espresso => a,:cappuccino => b,:latte => c,:mocha => d,:bill_id => i )
end
end

เพื่อรองรับฟังก์ชั่น

Order.create_new(params[:a],params[:b],params[:c],params[:d],1)
นั่นเอง

และในไฟล์

models/shop.rb

class Shop < ApplicationRecord
def self.create_new(name)
Shop.create( :name => name )
end
end 

ฟังก์ชั่น พวกนี้เป็นฟังก์ชั่น สำหรับทดลอง การสร้าง ร้านค้าใหม่ เพิ่มเข้าไปใน ฐานข้อมูล และดึงข้อมูลชื่อร้านค้าออกมา

และเมื่อทุกอย่างเสร็จแล้ว

พิม

rails server

บน Promtps

เพื่อทำการเปิดเซิฟเวอร์รอให้บริการ

ผลลัพธ์ในส่วน wsdl จะได้ผลลัพธ์ ประมาณนี้





ในส่วนของ Client นั้น จะใช้งาน
require 'savon'
สำหรับ ruby เพื่อใช้งานโปรโตคอล soap

client = Savon::Client.new(wsdl: "link ??")
โดย เปลี่ยน ข้างในเป็น link ที่อยู่ของ wsdl

และทำการ

result2 = client.call(:create_news_shop, message: {:name => 'rocket'})
เรียกใช้ soap action ดังนี้ได้เลย

ก็เป็นอันเสร็จแล้วสำหรับ ขั้น ตอนที่ 3 เตรียม ฐานต่างๆ ขั้นตอนต่อไปจะเป็นการเพิ่ม ฟังก์ชั่นให้เรียกใช้งานได้หลากหลายขึ้น

Tutorial 5 : deploy

Heroku

Heroku เป็น Platform as a Service (Paas) ที่ให้เราใช้งานได้ฟรี (มีแบบเสียเงินด้วย) โดยรองรับภาษาโปรแกรมที่หลากหลาย เช่น Ruby, PHP, Node.js, Python, Java, Clojure, Scala และยังสามารถสร้าง buildpack สำหรับภาษาอื่นๆได้ เช่น Lua ที่รันอยู่บน OpenResty ได้อีกด้วย

ref : link


นำ Heroku มาใช้กับงานของเรา

ก่อนอื่นก็ทำการสมัครสมาชิก ก่อน คลิก ปุ่ม Sign up บนขวา

จากนั้นทำการกรอกข้อมูลให้ครบถ้วน และทำการ ยืนยัน ตามขั้นตอนให้เสร็จแล้ว Login เข้ามาใช้งาน


จากนั้นกรอกรายละเอียด




จากนั้น จะขึ้นมาที่หน้าตานี้ 



เนื่องจาก เราจำเป็นต้องใช้ ฐานข้อมูล ด้วย และ Heroku ไม่สามารถใช้งาน Sqlite3 ได้ จึง ต้องใช้ ตัวอื่นแทน ซึ่งในที่นี้จะใช้งาน MySQL แทน 

gem 'mysql2', '~> 0.3.18'

ซึ่งทำให้จำเป็นต้องแทน ที่ gem ในไฟล์ gem เก่าด้วย mysql2

และทำการ

bundle install
จากนั้นไปดู ที่ หน้า resource แล้วเลือก add on พิมหา ClearDB จากนั้นเพิ่ม เข้ามา


โดยสามารถกำหนด แผนได้ว่าจะใช้ค่าใช้จ่ายเท่าไหร่ [ อาจจะจำเป็นต้องเชื่อมบัตร เครดิต ก่อนด้วย ] 



ให้เข้าหน้า setting แล้วไปที่ Config Vars แล้วเปลี่ยน จาก

CLEARDB_DATABASE_URL
ไปเป็น
DATABASE_URL

จากนั้น โหลด Heroku CLI จาก https://devcenter.heroku.com/articles/heroku-cli

และ เข้าไปที่ Promtps และ พิม

$ heroku login

และทำการ Login ด้วย heroku id

จากนั้น ไป ที่ ๆ มี โปรเจ็ค งาน ที่พร้อม ใช้งานแล้วจากนั้น

git init
heroku git:remote -a pos-service-token

สร้าง git repo และทำการ เชื่อมโยงกับ heroku  โดย ส่วนสีแดงคือชื่อโปรเจค ที่จะอัพลงไป

แต่นี้ยังไม่ได้่อัพ หรือ deploy เราจะเป็นต้อง

git add *
git commit -m "commit ??"
git push heroku master 
เพียงเท่านี้ ก็ทำการอัพโหลด โค้ดหรือโปรเจค ล่าสุดที่ทำการ commit แล้ว

หาก ใช้งานหลายคน อาจจะมีการ merge กัน ได้ ควร pull มาแก้ไขก่อนใช้งานจริง

ส่วนการใช้งานคำสั่ง command line ผ่าน heroku

สามารถทำได้โดย

heroku run คำสั่ง 

ได้เลย

และ หากมีการใช้งาน database เหมือนงานชิ้นนี้

ก็อาจจะต้องทำการ ใช้คำสั่ง

heroku run 'rake db:setup'

เพื่อจัดการ ในครั้งแรก อีกด้วย ซึ่ง ในงานของเรา เนื่องจากมีการเปลี่ยน ฐานข้อมูลจาก

sqlite3 > mysql

รัน heruoku run rake db:migrate เพื่อทำการสร้างดาต้าเบส แทน set up


ผลลัพธ์

หลังจากอัพโหลด แล้ว แก้ไข ส่วนของฐานข้อมูลเสร็จแล้ว ทำการ heroku run rails server
เพื่อทำการเปิด เซิฟเวอร์แล้วจะได้ผลลัพธ์ ดังนี้


Tutorial 1: ลง Ruby และ Ruby on rails

ขั้นตอนการลง Ruby on Rails
ในที่นี้จะใช้ Windows 10 ในการติดตั้ง Ruby
Windows
ให้ไปโหลด Rails Installer ที่ http://railsinstaller.org/en
ทำการติดตั้งโดยกด Next ไปเรื่อยๆ และ Install ตามปกติ


ทำการ update Ruby Gems โดยเปิด command line (กด ctrl+r แล้วพิมพ์ cmd)
แล้วใส่คำสั่ง

curl http://installrails.com/update_rubygems.rb | ruby