У сучасному веб-розробці реального часу, інтерактивність та швидкість є ключовими аспектами, які впливають на досвід користувачів. Ruby on Rails, один з найпопулярніших фреймворків для веб-розробки, пропонує потужний інструмент для реалізації функцій реального часу через Action Cable. У цій статті ми розглянемо, як створити Rails-додаток з використанням Action Cable, щоб забезпечити інтерактивність у ваших веб-додатках.
Action Cable — це компонент Ruby on Rails, який дозволяє легко додавати функціональність WebSocket до ваших додатків. WebSocket — це протокол, який забезпечує двостороннє спілкування між клієнтом і сервером, що дозволяє обмінюватися даними в реальному часі без необхідності постійно перезавантажувати сторінку.
Давайте розглянемо, як налаштувати простий Rails-додаток з Action Cable. Для цього ми створимо чат-додаток, де користувачі зможуть обмінюватися повідомленнями в реальному часі.
Спочатку створимо новий Rails-додаток. Відкрийте термінал і виконайте наступну команду:
rails new chat_app --skip-javascript
Після цього перейдіть у створену директорію:
cd chat_app
Action Cable вже вбудований у Rails, тому вам не потрібно додавати жодних додаткових гемів. Однак, вам потрібно налаштувати Action Cable у вашому додатку. Відкрийте файл config/cable.yml
і переконайтеся, що у вас є правильні налаштування для вашого середовища:
development: adapter: async test: adapter: test production: adapter: redis url: redis://localhost:6379/1
У цьому прикладі ми використовуємо адаптер async
для розробки та redis
для продакшн-середовища.
Тепер давайте створимо канал для нашого чату. Виконайте команду:
rails generate channel Chat
Це створить файл app/channels/chat_channel.rb
. Відкрийте його та додайте наступний код:
class ChatChannel < ApplicationCable::Channel def subscribed stream_from "chat_channel" end def unsubscribed # Cleanup when channel is unsubscribed end def send_message(data) ActionCable.server.broadcast("chat_channel", message: data['message']) end end
У цьому коді ми підписуємося на канал chat_channel
і визначаємо метод send_message
, який буде використовуватися для надсилання повідомлень.
Тепер давайте налаштуємо JavaScript для підключення до нашого каналу. Відкрийте файл app/javascript/channels/chat_channel.js
і додайте наступний код:
import consumer from "./consumer" consumer.subscriptions.create("ChatChannel", { 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 messages = document.getElementById('messages') messages.insertAdjacentHTML('beforeend', `${data.message}
`) }, send_message(message) { this.perform('send_message', { message: message }) } });
Цей код підключає наш JavaScript до каналу ChatChannel
і визначає метод send_message
, який буде використовуватися для надсилання повідомлень.
Тепер давайте створимо простий інтерфейс для нашого чату. Відкрийте файл app/views/layouts/application.html.erb
і додайте наступний HTML-код:
ChatApp <%= csrf_meta_tags %> <%= csp_meta_tag %> <%= stylesheet_link_tag 'application', media: 'all' %> <%= javascript_pack_tag 'application' %>
Цей код створює простий інтерфейс для чату з полем введення та кнопкою для надсилання повідомлень.
Тепер, коли ми налаштували наш чат-додаток, давайте запустимо сервер Rails:
rails server
Відкрийте браузер і перейдіть за адресою http://localhost:3000
. Ви повинні побачити інтерфейс чату. Відкрийте кілька вкладок браузера, щоб протестувати функціональність чату. Коли ви надсилаєте повідомлення з однієї вкладки, воно повинно з'явитися в інших вкладках у реальному часі.
Action Cable — це потужний інструмент для створення інтерактивних веб-додатків з функціональністю реального часу. У цій статті ми розглянули, як налаштувати простий чат-додаток за допомогою Action Cable у Ruby on Rails. Тепер ви можете використовувати ці знання для створення більш складних додатків з функціональністю реального часу.
Не забувайте експериментувати з Action Cable, щоб дізнатися більше про його можливості та як ви можете використовувати його у своїх проектах!
© 2024 RailsInsights. All rights reserved.