Yêu cầu thg 7 3, 2018 6:47 SA 207 0 0
  • 207 0 0
0

Bỏ qua file index.html trong RoR 5?

Chia sẻ
  • 207 0 0

Chào anh em, mình có 1 Project về RoR 5, vì 1 lý do đặc biệt mà phải cần file index.html ở trong thư mục public. Tuy nhiên khi chạy mình không muốn chạy vào file này, mà code vẫn chạy vào root router như bình thường. Ai biết cách xin chỉ giúp với ạ.

thg 7 3, 2018 7:07 SA

Lý do đặc biệt là gì hả bạn? Biết đâu giải quyết lý do đó bằng giải pháp khác sẽ dễ dàng hơn thì sao 😄

Avatar Tran Duc Thang @thangtd90
thg 7 3, 2018 7:14 SA

Tuy nhiên khi chạy mình không muốn chạy vào file này, mà code vẫn chạy vào root router như bình thường

cái này tức là khi request đến domain.com/index.html thì nó sẽ không ra nội dung file index.html, mà request sẽ do rails xử lý đúng không bạn 🤔

Avatar bienhoang @bienhoang
thg 7 3, 2018 7:18 SA

@bs90 haha. lý do này bản thân mình cũng không biết đâu. chỉ đơn giản là yêu cầu nó thế. và mình phải đi tìm giải pháp. có thể khả thi có thể không, mình thì dã thử nhiều cách và thấy không khả thi lắm, nên muốn hỏi thêm mọi người xem.

Avatar bienhoang @bienhoang
thg 7 3, 2018 7:19 SA

@thangtd90 thực ra thì hiện tại khi request domain.com/ nó sẽ ra nôi dung file index.html, em muốn là khi vào domain.com/ thì request sẽ do rails xử lý như bác nói. ngặt cái có vẻ như rails nó vẫn chạy file index.html. Nếu xoá đi nó sẽ vào router như thường.

thg 7 3, 2018 7:27 SA

@bienhoang Cơ chế của Rails trong trường hợp đó bao giờ cũng tìm index.html trong public trước. giờ muốn sửa thì chỉ có đọc code rails xong overwrite đoạn đó thôi 😐

Còn nếu chỉ là muốn access được vào domain.com/index.html mà không nhất thiết index.html phải đặt trong public thì có cách 😃

Avatar bienhoang @bienhoang
thg 7 3, 2018 7:32 SA

@bs90 vâng. khó lắm bác ạ.

thg 7 3, 2018 7:52 SA

@bienhoang Bạn deploy production chưa? Có khi đùng nginx dẫn root path về root path của mình được

thg 7 3, 2018 8:00 SA

@bienhoang Theo như mình hiểu thì từ Rails 4 trở lên có setting việc đọc file trong thư mục public trước khi duyệt qua route. Với trường hợp của bạn thì mình có 2 phương án để xử lý:

  1. Đơn giản nhất là chuyển file public/index.html qua 1 controller static_page hoặc đại loại thế và viết routes cho file này.
  2. Hoặc bạn có thể loại bỏ thư mục public ra khỏi khai báo routes của Rails 5 và khai báo nó qua nginx hoặc apache.
  • Setting trong file config:
config.public_file_server.enabled = false
  • Setting trong nginx
location <PATTERN> {
  # dùng try_files hoặc root ở đây để trỏ đến public/index.html
}

Link tham khảo https://github.com/rails/rails/blob/5ed8aa9e02014d7840e746f407068315d6fc6b63/guides/source/rails_on_rack.md

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í