Đầu tiên là tạo dự án rails đã.
$ rails new sample-chat -d mysql
Sau đó config database trong file config/database.yml
Bước tiếp theo đó là cài đặt gem websocket-rails
trong Gemfile
gem "websocket-rails"
Chạy lệnh bundle install
Chạy lệnh rails g websocket_rails:install
WebsocketRailsコントローラの作成. Tạo file app/controllers/websocket_chat_controller.rb
# WebsocketRails::BaseControllerを継承
class WebsocketChatController < WebsocketRails::BaseController
def message_recieve
# クライアントからのメッセージを取得
recieve_message = message()
# websocket_chatイベントで接続しているクライアントにブロードキャスト
broadcast_message(:websocket_chat, recieve_message)
end
end
Event Routerの設定. Sửa file events.rb
trong thư mục config
WebsocketRails::EventMap.describe do
subscribe :websocket_chat, to: WebsocketChatController, with_method: :message_recieve
end
Tạo controller Chat đơn giản
$ rails g controller Chat index
Trong file index.html.erb
chèn source code này vào
<!-- チャット表示部分 -->
<ul id="chat_area"></ul>
<!-- コメントフォーム -->
<input id="comment" type="text">
<input id="send" type="button" value="send">
<script>
var ws_rails = new WebSocketRails("sample-chat.local:3001/websocket");
// メッセージ受信時の処理
ws_rails.bind("websocket_chat", function(message){
var message_li = document.createElement("li");
message_li.textContent = message;
document.getElementById("chat_area").appendChild(message_li);
});
// メッセージ送信時の処理
document.getElementById("send").onclick = function(){
var comment = document.getElementById("comment").value;
ws_rails.trigger("websocket_chat", comment);
}
</script>
Rack::Lockの無効化. Trong file config/environments/development.rb
, viết thêm dòng config này vào:
config.middleware.delete Rack::Lock
Vậy là đã xong phần source code, giờ thì sẽ triển khai deploy trên Apache2, với Passenger & Virtualhost.
Trong Gemfile điền thêm hai gem:
# Deploy
gem 'passenger'
gem 'therubyracer', platforms: :ruby
Bundle install xong thì chạy lệnh passenger-install-apache2-module
. Thiết lập Passenger cho thằng Apache2.
Thiết lập thêm theo cách này cho chắc ăn. Nhưng hình như sẽ bị cảnh báo là confict. Hiện thời chưa thấy confilct gì cả.
First, install the PGP key for the repository server:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 561F9B9CAC40B2F7
Create an APT source file:
sudo nano /etc/apt/sources.list.d/passenger.list
Insert the following line to add the Passenger repository to the file:
deb https://oss-binaries.phusionpassenger.com/apt/passenger trusty main
Press CTRL+X to exit, type Y to save the file, and then press ENTER to confirm the file location.
Change the owner and permissions for this file to restrict access to root:
sudo chown root: /etc/apt/sources.list.d/passenger.list
sudo chmod 600 /etc/apt/sources.list.d/passenger.list
Update the APT cache:
sudo apt-get update
Finally, install Passenger:
sudo apt-get install libapache2-mod-passenger
Make sure the Passenger Apache module; it maybe enabled already:
sudo a2enmod passenger
Restart Apache:
sudo service apache2 restart
Giờ là lúc setup server apache. Hiện tại thì bắt buộc phải copy source code vào trong thư mục /var/www
, khá là bất tiện.
$ sudo vim /etc/apache2/sites-available/sample-chat.local.conf
Sau đó chèn code sau
<virtualhost *:80>
DocumentRoot "/var/www/sample-chat/public"
ServerName sample-chat.local
SetEnv RACK_ENV development
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory "/var/www/sample-chat/public">
Options FollowSymLinks
Require all granted
</directory>
</virtualhost>
Say đó sửa file /etc/hosts
để thiết lập domain ảo ở local.
Chạy lệnh
$ sudo a2ensite sample-chat.local
$ sudo service apache2 reload
$ sudo service apache2 restart
Vào trong thư mục source code chạy lệnh rake secret
sau đó copy đoạn mã vào trong file config/secret.yml
Sửa config trong file config/initializers/websocket_rails.rb
về config.standalone = true
. Sau đó chạy lệnh:
$ rake websocket_rails:start_server
$ rake assets:precompile
Vậy là đã hoàn tất!