THẢO LUẬN

úi giời ơi, úi giời ơi

0
Avatar
đã bình luận cho bài viết
thg 5 17, 2019 3:34 CH

Được e nhé, cứ đưa vào như là một tham số bình thường thôi.

0

OK bạn, nếu pubsub theo toàn cục firebase theo interval thì ổn, chứ pubsub riêng lẻ từng request thì lại sai.

0
thg 5 17, 2019 10:39 SA

thanks ad. Dev cũng có thơ nữa!! hay!

0

Không. t vẫn đang nodejs, hồi trước có học python nên giờ làm bài ý mà 😃)

0

Lại chuyển sang python à 👏

0

Đổi đuôi application.css thành application.scss và thêm
@import "bootstrap-sprockets"; @import "bootstrap";

0

Nếu dev k support IE nữa thì người dùng sẽ tự bỏ IE thôi =)) Vì 1 tương lại k phải fix bug IE, xoá luôn IE đi bạn

0

tớ dùng Edge, k chạy đc cậu ạ 😔😔

+1

Thanks bác, Bài viết hay! Nhưng ở đầu có nhắc tới cách cài đặt và config redis mà không thấy bác sử dụng đến Redis. Nếu được, bác viết thêm mấy bài về Redis luôn cho mọi người hiểu thêm.

0
thg 5 17, 2019 8:49 SA

Thanks!

0

Cảm ơn bài chia sẻ của Quang nhé.

+1

Chào Lê Phương. Theo mình trong trường hợp này Firebase đóng vai trò backend và khi dữ liệu cập nhật firebase/firestore sẽ gởi thông báo đến frontend, nói cách khác frontend nhận dữ liệu theo cơ chế push và hiển thị kêt quả mà không làm nhiêm vụ lưu trữ cục bộ & tăng bộ đếm nên sẽ không xảy ra sai lênh. Thân nhé.

+1

thanks bạn đã quan tâm.

mình thấy vẫn ổn mà bạn. tại thời điểm hiển thị kết quả votes, sẽ lấy dữ liệu từ firebase gửi về. nếu thời điểm đó mà có ai vote đi chăng nữa thì nó cũng ko ảnh hưởng đến cái dữ liệu đã lấy về. Sau đó khi có dữ liệu trong firestore thì firebase lại đẩy về cho mình thống kê. kiểu kiểu đó.

ví dụ như tại thời điểm A có 4 người chọn yes, 6 người chọn No. khi đó A sẽ có 40% người chọn, B sẽ có 60% người chọn. Kể cả tại thời điểm A này mà có 2 người vote thêm đi chăng nữa thì lúc này vẫn hiên thị là 40% vs 60%.

Sau khi có dữ liệu vote mới trong firestore thì firebase sẽ trigger và đẩy về cho mình. nhưng lúc này sẽ ko lấy hết mà sẽ chỉ lấy những thay đổi từ thời điểm A trở đi thôi. Vì nó sử dụng hàm docChanges() mà. Khi đó dữ liệu đã có tại thời điểm A + dữ liệu mới tại thời điểm B và lại tính toán xem % người trả lời A và B là bao nhiêu. và hiển thị ra màn hình.

Thằng firebase nó thực hiện theo cơ chế pubsub nên mình thấy nó vẫn đảm bảo tính toàn vẹn của dữ liệu.

0
thg 5 17, 2019 4:09 SA

bạn có thể tham khảo docker config này


Dockerfile

FROM ruby:2.4.0-alpine

ENV APP_ROOT /your_app

# Configure the main working directory. This is the base
# directory used in any further RUN, COPY, and ENTRYPOINT
# commands.

# RUN mkdir -p $APP_ROOT
WORKDIR $APP_ROOT

# Expose port 3000 to the Docker host, so we can access it
# from the outside.
EXPOSE 3000

# Install apt based dependencies required to run Rails as
# well as RubyGems. As the Ruby image itself is based on a
# Debian image, we use apt-get to install those.
RUN apk update && \
    apk upgrade && \
    apk add --update --virtual build-dependencies \
    git \
    bash curl-dev ruby-dev build-base\
    zlib-dev libxml2-dev libxslt-dev tzdata yaml-dev mysql-dev \
    ruby-json yaml nodejs \
    linux-headers && \
    rm -rf /var/cache/apk/*

# Copy the Gemfile as well as the Gemfile.lock and install
# the RubyGems. This is a separate step so the dependencies
# will be cached unless changes to one of those two files
# are made.
COPY Gemfile Gemfile.lock ./
RUN gem install bundler && \
    bundle config build.nokogiri --use-system-libraries && \
    QMAKE=/usr/lib/qt5/bin/qmake bundle install && \
    bundle clean

# Copy the main application.
COPY . ./
CMD ["fuser, "-n", "tcp", "-k", "3000", "bundle", "exec", "rails", "server", "-b", "0.0.0.0"]

docker-compose.yml

your_app:
  build: .
  command: bundle exec rails s -p 3000 -b '0.0.0.0'
  environment:
    DATABASE_HOST: '...'
    DATABASE_USER: '...'
    DATABASE_PASSWORD: ''
  volumes:
    - .:/app
  ports:
    - "3000:3000"
  links:
    - db
  tty: true
  stdin_open: true
db:
  image: mysql:5.7.18
  environment:
    MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
    #MYSQL_ALLOW_EMPTY_PASSWORD: 'no'
0
thg 5 17, 2019 4:08 SA

Bài viết đủ hiểu!

0
thg 5 17, 2019 4:03 SA

bài viết rất dễ hiểu , cảm ơn bạn 😄

0

@tango :Trước hết cảm ơn bạn vì bài chia sẻ. Có một vấn đề chưa thấy bạn nói đến, mặc dù chắc chắn sẽ xảy ra trong thực tế: đó là việc đếm votes. Để dễ hình dung, thì khi quá trình voting sẽ xảy ra 2 luồng dữ liệu:

  • Frontend: người dùng vote trên điện thoại, gửi 1 request tới Firebase. Firebase sẽ xử lý async từng request và insert dữ liệu (vote/câu trả lời) vào firestore.
  • Backend: việc tính/đếm lượng vote sẽ như thế nào: ví dụ khi đang cộng votes: newSum = oldSum + 1, thì có vote mới tới, sẽ xảy ra tình trạng bất bảo toàn dữ liệu. Không thấy nói đến việc này trong bài viết trên. Bởi có thể màn hình chỉ hiển thị tỉ lệ % chọn votes nên mọi người sẽ không thấy rõ, chứ nếu hiển thị số lượng vote (quantity) thì các con số sẽ sai lệch với số lượng người votes trong hội trường (1000).
0
Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí