THẢO LUẬN

Avatar
đã nhận xét cho câu hỏi
thg 8 22, 2020 6:50 SA

@tuananhbfs chỉ trừ hai link đó thôi hả bạn còn lại là ok hết hả

0
thg 8 22, 2020 6:47 SA

đúng như lỗi đã in ra, với bản phân phối Alpine thì không có tensorflow thoả mãn yêu cầu của e.

Cách đơn giản là e FROM trực tiếp từ image tensorflow được support official, build và test cẩn thận, check ở trang chủ Tensorflow nhé e.

Chọn đúng tag của phiên bản tensorflow e cần là được nhé. Ở đây

0

Trong Dart, vì int với double đều là kiểu object mà bạn để ý class int nó không có extends class double hay nói cách khác class int ko phải con của class double nên khi bạn dùng: double as sang int nó sẽ lỗi ngay. Bạn muốn convert double sang int có thể dùng hàm toInt(). Trong Kotlin cũng như vậy luôn bạn nhé. Còn trong Java thì ép thế lại được vì int và double trong Java ko phải là object mà nó là kiểu nguyên thủy.

0

(len)

+1
thg 8 22, 2020 4:19 SA

Cuối cùng cũng có người để ý 😄,

Vấn đề là nếu e làm tới cuối bài (sau phần setup password cho Redis), từ đây data sẽ không còn được lưu lại trong file dump.rdb ở folder .docker/data/redis nữa.Dẫn tới việc session sẽ không được lưu và sau khi docker-compose down thì sẽ bị mất.

Lí do: mặc định khi chạy Redis mà không có option nào (ý là nếu ta không thêm --requirepass vào commanddocker-compose.yml) thì Redis sẽ đều đặn write data vào file dump.rdb với config như sau:

docker-compose exec redis sh
redis-cli
config get save
->>> in ra:
1) "save"
2) "3600 1 300 100 60 10000"

Ý là Redis sẽ đều đặn lưu data (hay cụ thể ở đây là session của user) vào file nếu 1 trong các điều kiện sau xảy ra:

  • Sau 3600 giây và có 1 sự thay đổi ở data trong Redis
  • hoặc sau 300 giây và có 100 sự thay đổi
  • hoặc sau 600 giây và thấy có 10000 thay đổi

Nhưng khi ta khởi động redis-server với bất kì 1 option nào thì config mặc định sẽ không được áp dụng nữa, ở đây do ta thêm --requirepass nên nếu e docker-compose up, sau đó chui vào container redis để check lại thì sẽ thấy in ra config get save với giá trị rỗng, tức không bao giờ ghi ra file nữa. Do đó khi ta docker-compose down đi thì data sẽ mất

Vậy nên nếu e muốn lưu lại session ngay cả khi e docker-compose down, thì ở command của service redis trong docker-compose.yml e sửa lại cho a như sau:

command: redis-server --requirepass ${REDIS_PASSWORD} --save 10 1 --save 30 30

Giờ đây cứ sau 1 khoảng thời gian và có 1 số sự thay đổi thì Redis sẽ cập nhật lại file dump.rdb, ở trên a thiết lập:

  • Sau 10 giây nếu có 1 sự thay đổi
  • Hoặc sau 30 giây có 30 sự thay đổi

E nên chọn chọn cho mình 1 con số phù hợp với app của e

Có 1 option khác là --appendonly yes thì data sẽ được lưu khi có bất kì thay đổi nào, trường hợp này data sẽ được lưu ở file .aof

File AOF thì dung lượng thường lớn hơn file .rdb và về lý thuyết thì tốc độ đọc cũng sẽ chậm hơn. Nhưng nếu app của e không quan tâm tới khả năng nhanh chậm trong khoảng mili giây thì vẫn oke. Nhưng nói chung a vẫn khuyên nên lưu ở file .rdb hơn

Đến đây thì ta có thể docker-compose down/up thoải mái, F5 lại trình duyệt vẫn sẽ còn session, nhưng session được lưu chỉ khi ta không tắt trình duyệt. Lí do express-session lưu session trong cookie, khi ta tắt trình duyệt thì cookie sẽ bị mất (hết hạn), nên mặc dù data trong Redis vẫn còn nhưng khi mở lại trình duyệt thì cookie trên trình duyệt và data trong Redis thì ko còn khớp nữa nên session coi như mất.

Do đó e cần sửa lại code ở file modules/session.js, đoạn module.exports như sau:

module.exports = session({
  store: new RedisStore({
    client
  }),
  secret: 'supersecret',
  reave: false,
  saveUninitialized: true,
  cookie: { // set "tuổi" cho cookie, để khi tắt trình duyệt bật lại thì cookie vẫn còn "trẻ" và chưa "chết"
    expires: false,
    maxAge: 1000 * 60 * 60 * 24 * 7
  }
})

Sau đó e clear cookie tại trình duyêt. Tiến hành build lại image và chạy lại là oke nhé 😃


Bonus

Nếu e vừa muốn set password vừa muốn giữ toàn bộ cấu hình mặc định của redis để không phải đau đầu vì những điều bên trên, thì e làm như sau (recommend khi chạy ở production):

  • Vào trang chủ Redis download file cấu hình mặc định, ở đây. Đọc dòng "The self documented redis.conf for Redis 5.0"
  • Mở file đó lên tìm tới đoạn có requirepass rồi đặt password của e vào
  • Sau đó ở docker-compose.yml service redis e sửa lại như sau:
redis:
    image: redis:5-alpine
    volumes:
      - .docker/data/redis:/data
      - ./redis.conf:/usr/local/etc/redis/redis.conf # ---> map config vào container để khi Redis khởi động sẽ đọc file này lên
    restart: unless-stopped
    networks:
      - cache-network
    healthcheck:
      test: ["CMD", "redis-cli","ping"]
      interval: 30s
      timeout: 10s
      retries: 5

a sẽ không cập nhật lại code hay nội dung trong bài để nếu bạn nào có thắc mắc như e có thể đọc comment này và hiểu kĩ hơn về cơ chế lưu data của Redis nhé

+1

e check lại xem đã có code thư viện được gọi ra chưa

0
thg 8 22, 2020 3:43 SA

Series quá hay, e phải login để vote cho a.
A thông hộ e chỗ này với:
E làm theo hướng dẫn của a, dockerize cho 1 project Python có sẵn, đến bước này:
docker build -t learning-docker/python:v1 .
Thì nó chạy đến bước Step 5/6 : RUN pip install -r requirements.txt
Thì bị lỗi:
ERROR: Could not find a version that satisfies the requirement tensorflow>=1.12.0 (from -r requirements.txt (line 2)) (from versions: none) ERROR: No matching distribution found for tensorflow>=1.12.0 (from -r requirements.txt (line 2)).
Không tìm thấy version của tensorflow.
Bình thường nếu chạy code python ko dùng docker thì e sẽ chạy pip install....
Nhưng ở đây n chạy dc đến bước 5/6. Nên image n cứ bị restart lại liên tục, nên ko chạy dc docker-compose up để chạy pip install....
A cho e hỏi làm cách nào đề fix dc lỗi này ạ.

0
thg 8 22, 2020 3:40 SA

😍

0

Bạn Minh ơiiiii. Tks đã viết loạt bài này. Xin hỏi về ép kỉu as

num a=3.5; print(a.runtimeType); // double num b= a as int; //error print(b);

cách dùng as ntn để b có trị là a kiểu int? . Tks

+1
thg 8 22, 2020 1:44 SA

😅😅

0
thg 8 22, 2020 1:39 SA

Bài viết hay quá, cảm ơn tác giả (y)

+1
thg 8 22, 2020 1:35 SA

Hay quá, cảm ơn tác giả

+1
thg 8 22, 2020 1:08 SA

@truong.hong.thai cảm ơn bạn, mình sẽ thử 👏

+1
Avatar
đã nhận xét cho câu hỏi
thg 8 22, 2020 1:07 SA

@phuongdong1995 mình muốn như vậy đó bạn. Trừ các link bắt đầu với /test/ /abc/ ra

0
thg 8 22, 2020 1:04 SA

default param: khi param truyền vào là undefined thì lúc đó mới lấy default param, còn param = null thì không. Bạn truyền undefined vào 2 cách sẽ thấy sự khác biệt

+1

Trong container redis em có volumns thư mục .docker/data/redis:/data nhưng khi em down thì các session không được lưu lại. Như vậy là sao ạ?

0

Cảm ơn bạn!

0
thg 8 21, 2020 6:29 CH

cho mình xin full code với

0
thg 8 21, 2020 4:14 CH

(clap)(clap)

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í