Asked Jan 19th, 11:33 AM 126 1 3
  • 126 1 3
+1

Xin tư vấn về rails

Share
  • 126 1 3

Nhờ các bạn tư vấn giúp mình vài câu hỏi sau đây với, mình mới học rails 1 thời gian nên nhiều keyword để research cũng chưa được thạo.

  1. Mình có 1 ứng dụng rails api, với 1 số api đơn giản. Mình có nhu cầu đó là khi người dùng gõ sai url, với url đó không trùng với 1 router nào, thì thay vì show ra cái đống lỗi chưa toàn bộ các router hợp lệ, thì mình muốn ẩn cái màn hình lỗi đó đi và show ra 1 giao diện not found khác để không tiết lộ cấu trúc router của dự án. Không biết mình có thể làm tính năng này như nào?

  2. trong project thường có lưu 1 số lượng ảnh nhất định, và ảnh thì dung lượng thường lớn làm web hoạt động không được mượt mà, mình có đọc và thấy 1 số hướng vẫn về gem minimagick...nhưng mình muốn hỏi các bạn đã làm thực tế trong dự án thì các bạn thường xử lý vấn đề tối ưu ảnh bằng thư viện hay cách nào để mình có thể tham khảo được chứ.

cảm ơn các bạn

Hoàn Kỳ @HoanKi
Jan 19th, 3:24 PM

3 ANSWERS


Answered Jan 19th, 3:28 PM
Accepted
+2
  1. Sửa trang hiển thị lỗi:

Theo như bạn mô tả thì màn hình đó chỉ hiển thị ở môi trường development, còn ở môi trường staging hoặc production thì rails đã define sẵn các trang để hiển thị rồi, ví dụ như thế này:

WuWRA.png

Bạn có thể chạy rails s -e staging để kiểm tra điều trên.

Còn nếu bạn muốn custom trang hiển thị lỗi thì làm như sau:

  • Config để khi trỏ exception vào routes.

config/application.rb

    config.exceptions_app = routes

  • Config để router nhận các exception:
  %w(404 422 500 503).each do |code_error|
    match code_error, to: "errors#default", via: :all
  end

List mã lỗi

  • Tạo controllerview tương ứng như bạn vừa define là được.

Nếu bạn muốn ở cũng hiển thị trang default error ở development thì thêm 1 setting nữa: config/environments/development.rb

 # Show full error reports.
  config.consider_all_requests_local = true
  1. Hiện nay, việc lưu ảnh thì thường sẽ lưu trữ trên server Amazon bạn ạ, rails app sẽ chỉ lưu trữ đường link và một vài thông tin của ảnh.

Rất tiện lợi khi Rails 5.2 đã ra mắt chức năng Active Storage : Bạn có thể đính kèm bất kì một têp gì vào record trong database (image, excel, word ...) và có cần config một chút sẽ có thể lưu tệp ở amazon hoặc azure hoặc google cloud tùy bạn chọn lựa. Khá hữu ích và dần các dự án đang chuyển sang dùng cái này, bạn tham khảo nhé !

Share
Thien Ha @thienhavosong
Jan 20th, 6:12 AM

cam on ban nhieu nhieu, ban tra loi chi tiet qua, (bow)

0
| Reply
Share
Hoàn Kỳ @HoanKi
Jan 20th, 6:13 AM

@thienhavosong Ủa bạn dùng (bow) à ? Thế khả năng là "framgiaer" roài

0
| Reply
Share
Ho Hoang Lam @HoangLam
Jan 23rd, 2:22 PM

phần Active Storage bổ ích quá 🙂

+1
| Reply
Share
Hoàn Kỳ @HoanKi
Jan 24th, 1:25 AM

@HoangLam Bên đấy em còn code rails hông ?

0
| Reply
Share
Answered Jan 19th, 12:36 PM
+3
  1. Khi bạn làm việc ở môi trường develop vs test thì nó mới hiện lỗi thôi bạn. Còn trên product thì rails có care việc này rồi và nó sẽ dẫn đến đường dẫn đến những file 404 hay 500 nằm ở thư mục public. Và bạn hoàn toàn có thể config lại nó hoặc tạo riêng. Mình thường làm theo cách này 😃. link

  2. Việc lưu ảnh trong dự án là điều tất nhiên. Nhưng nó thưởng chỉ lưu những ảnh banner hay logo vì nó là những ảnh public và thường ít khi thay đổi. Còn những loại ảnh khác thì mình thường lưu trên các cloud như aws, Azure,... hay nếu muốn free thì cloudinary.

  • Còn gem minimagick bạn đề cập đến theo mình làm thì nó không làm giảm kích thước ảnh mà nó tạo ra ảnh mới với kích thước bạn yêu cầu và bạn lựa chọn càng nhiều loại kích thước thì bạn lại càng có nhiều ảnh thumb. Đây là thủ thuật crop đó. 😃

Đó là ý kiến cá nhân của mình từ những thứ mình đã làm. Nếu có sai sót mong mọi người góp ý thêm 😃.

Share
Thien Ha @thienhavosong
Jan 20th, 6:13 AM

cam on ban da goi y cho minh rat chi tiet (bow)

0
| Reply
Share
Answered Jan 24th, 8:40 AM
0
  1. Nếu bạn làm app api thì bạn có thể handle các error thường hay gặp. ( lỗi hay gặp thì có thể tìm vài bài ở trên viblo).
  2. Việc lưu ảnh bạn có thể tìm hiểu về lưu ảnh ở trên S3 (Amazon Web Service).
Share