ที่มาและหลักการ
Project สั่งเมนูอาหารด้วยเสียง
เป้าหมายหลักที่นำไปใช้คือร้านอาหาร ประเภท drive-through
แนวคิดคือ ใช้ machine รับ order แทนมนุษย์
แสดงบทความที่มีป้ายกำกับ Tutorial แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ Tutorial แสดงบทความทั้งหมด
วันพุธที่ 10 ตุลาคม พ.ศ. 2561
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
เริ่มจากการเปิดโปรเจค งานก่อน
พิม
และในการที่ เราจะทำ soap application นั้น เราจะใช้ gem wash_out
https://github.com/inossidabile/wash_out
ให้เข้าไปที่
ทำการเพิ่ม
แล้วเซฟ
แล้วทำการใช้งาน
เพื่อโหลด wash_out มาใช้งาน
ทำการสร้างโมเดลใน Ruby On Rails
ทำการสร้างโมเดล shop แล้ว โดยกำหนด name เป็น string โดยพิมพ์คำสั่ง
ทำการสร้างโมเดล bill แล้ว โดยกำหนด dateเป็น dateโดยพิมพ์คำสั่ง และ refences ไปยัง shop ตาม ER Diagram ด้านบน
ทำการเพิ่ม คำสั่งดังนี้
Controller
ซึ่งในโฟล์เดอร์
สร้างไฟล์ ใหม่ชื่อ service_controller.rb และมีโค้ดดังนี้
โดย
เป็น ส่วนที่จำเป็นต้องเพิ่มขึ้นมาเมื่อจะใช้งาน WashOut
และจะสังเกตุได้ว่า ส่วนสำคัญจะมีการกำหนด ดังรูปแบบนี้
เป็น ค่าความจริง เท่านั้น ทั้งหมด และ คืนค่าเป็น string กลับไป
นั้นเอง
และ จะมีส่วนสำคัญอีกส่วนคือ
ในส่วนของ ฐานข้อมูลนั้น
Models
ในไฟล์ models/order.rb
เพื่อรองรับฟังก์ชั่น
และในไฟล์
models/shop.rb
ฟังก์ชั่น พวกนี้เป็นฟังก์ชั่น สำหรับทดลอง การสร้าง ร้านค้าใหม่ เพิ่มเข้าไปใน ฐานข้อมูล และดึงข้อมูลชื่อร้านค้าออกมา
และเมื่อทุกอย่างเสร็จแล้ว
พิม
บน Promtps
เพื่อทำการเปิดเซิฟเวอร์รอให้บริการ
ผลลัพธ์ในส่วน wsdl จะได้ผลลัพธ์ ประมาณนี้
ในส่วนของ Client นั้น จะใช้งาน
และทำการ
ก็เป็นอันเสร็จแล้วสำหรับ ขั้น ตอนที่ 3 เตรียม ฐานต่างๆ ขั้นตอนต่อไปจะเป็นการเพิ่ม ฟังก์ชั่นให้เรียกใช้งานได้หลากหลายขึ้น
พิม
rails new appNameเพื่อทำการสร้าง โปรเจ็ค แบบอัตโนมัติขึ้นมาก่อน
และในการที่ เราจะทำ soap application นั้น เราจะใช้ gem wash_out
https://github.com/inossidabile/wash_out
ให้เข้าไปที่
....\appName\Gemfile
ทำการเพิ่ม
gem 'wash_out'
แล้วเซฟ
แล้วทำการใช้งาน
bundle install
เพื่อโหลด wash_out มาใช้งาน
ทำการสร้างโมเดล 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 dowash_out :rumbasend
โดยที่ AppName ดูได้ที่ไฟล์ application.rb (แล้วแต่การใช้งาน)
และ service ใน แถว wash_out :service
นั้น คือ ชื่อไฟล์ Controller
Controller
ซึ่งในโฟล์เดอร์
...\appName\app\controllers
สร้างไฟล์ ใหม่ชื่อ service_controller.rb และมีโค้ดดังนี้
class ServiceController < ApplicationControllersoap_service namespace: 'urn:WashOut'
soap_action "get_shop_name_by_id",:args => { :id => :integer},:return => :stringdef get_shop_name_by_idrender :soap => ((Shop.find(params[:id]))[:name])end
soap_action "create_news_shop",:args => { :name => :string},:return => :stringdef create_news_shopShop.create_new(params[:name])render :soap => "create news shop success"endsoap_action "create_news_order",:args => { :a => :boolean , :b => :boolean, :c => :boolean, :d => :boolean },:return => :stringdef create_news_orderOrder.create_new(params[:a],params[:b],params[:c],params[:d],1)render :soap => "create order success"endend
โดย
soap_service namespace: 'urn:WashOut'
เป็น ส่วนที่จำเป็นต้องเพิ่มขึ้นมาเมื่อจะใช้งาน WashOut
และจะสังเกตุได้ว่า ส่วนสำคัญจะมีการกำหนด ดังรูปแบบนี้
ซึ่งจะเป็นการกำหนดชื่อ soap action และ รูปแบบ input output ต่างๆ เช่นข้างบน จะรับ ตัวแปร 4 ตัวsoap_action "create_news_order",:args => { :a => :boolean , :b => :boolean, :c => :boolean, :d => :boolean },:return => :string
เป็น ค่าความจริง เท่านั้น ทั้งหมด และ คืนค่าเป็น string กลับไป
นั้นเอง
และ จะมีส่วนสำคัญอีกส่วนคือ
เพื่อคืนค่า ใน รูปแบบ soap กลับไปให้ผู้ที่ร้องขอมาrender :soap => "create order success"
ในส่วนของ ฐานข้อมูลนั้น
Models
ในไฟล์ models/order.rb
class Order < ApplicationRecordbelongs_to :bill
def self.create_new(a,b,c,d,i)Order.create( :espresso => a,:cappuccino => b,:latte => c,:mocha => d,:bill_id => i )endend
เพื่อรองรับฟังก์ชั่น
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 นั้น จะใช้งาน
สำหรับ ruby เพื่อใช้งานโปรโตคอล soaprequire 'savon'
โดย เปลี่ยน ข้างในเป็น link ที่อยู่ของ wsdl
client = Savon::Client.new(wsdl: "link ??")
และทำการ
เรียกใช้ soap action ดังนี้ได้เลยresult2 = client.call(:create_news_shop, message: {:name => 'rocket'})
ก็เป็นอันเสร็จแล้วสำหรับ ขั้น ตอนที่ 3 เตรียม ฐานต่างๆ ขั้นตอนต่อไปจะเป็นการเพิ่ม ฟังก์ชั่นให้เรียกใช้งานได้หลากหลายขึ้น
Tutorial 5 : deploy
Heroku
ซึ่งทำให้จำเป็นต้องแทน ที่ gem ในไฟล์ gem เก่าด้วย mysql2
และทำการ
จากนั้น โหลด Heroku CLI จาก https://devcenter.heroku.com/articles/heroku-cli
และ เข้าไปที่ Promtps และ พิม
และทำการ Login ด้วย heroku id
จากนั้น ไป ที่ ๆ มี โปรเจ็ค งาน ที่พร้อม ใช้งานแล้วจากนั้น
สร้าง git repo และทำการ เชื่อมโยงกับ heroku โดย ส่วนสีแดงคือชื่อโปรเจค ที่จะอัพลงไป
แต่นี้ยังไม่ได้่อัพ หรือ deploy เราจะเป็นต้อง
หาก ใช้งานหลายคน อาจจะมีการ merge กัน ได้ ควร pull มาแก้ไขก่อนใช้งานจริง
ส่วนการใช้งานคำสั่ง command line ผ่าน heroku
สามารถทำได้โดย
ได้เลย
และ หากมีการใช้งาน database เหมือนงานชิ้นนี้
ก็อาจจะต้องทำการ ใช้คำสั่ง
เพื่อจัดการ ในครั้งแรก อีกด้วย ซึ่ง ในงานของเรา เนื่องจากมีการเปลี่ยน ฐานข้อมูลจาก
sqlite3 > mysql
ผลลัพธ์
หลังจากอัพโหลด แล้ว แก้ไข ส่วนของฐานข้อมูลเสร็จแล้ว ทำการ heroku run rails server
เพื่อทำการเปิด เซิฟเวอร์แล้วจะได้ผลลัพธ์ ดังนี้
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)
แล้วใส่คำสั่ง
ทำการ update Ruby Gems โดยเปิด command line (กด ctrl+r แล้วพิมพ์ cmd)
แล้วใส่คำสั่ง
curl http://installrails.com/update_rubygems.rb | ruby
สมัครสมาชิก:
บทความ (Atom)



