2015-01-09 18 views
7

Tôi đang làm việc trên ứng dụng ember-cli mà tôi đang triển khai trong S3. Tôi thực sự muốn có thể sử dụng cách tiếp cận 'không máy chủ' này, vì nó rất đơn giản để cấu hình, và cực kỳ phải chăng.Triển khai ứng dụng ember-cli vào S3 mà không vi phạm các URL

Tôi gặp sự cố với URL. Nếu tôi nhấn http://my-bucket.s3-website-us-east-1.amazonaws.com/ nó hoạt động tốt. Nhưng nếu tôi cố gắng tải trực tiếp một trang khác với gốc của ứng dụng, chẳng hạn như http://my-bucket.s3-website-us-east-1.amazonaws.com/elephants/5, thì nó cung cấp 403, vì không có tài nguyên như vậy trong S3. (Tôi có thể điều hướng đến các trang như vậy thông qua ứng dụng, và tôi có thể nhấn trực tiếp vào chế độ dev trên máy của tôi, vì vậy ứng dụng ember đang hoạt động tốt.)

Tìm kiếm giải pháp, tôi tìm suggestions để thêm #! vào con đường. Điều này có vẻ tốt hơn, vì nó không trả lại 403, nhưng khi tôi nhấn http://my-bucket.s3-website-us-east-1.amazonaws.com/#!/elephants/5, nó chỉ chuyển hướng đến http://my-bucket.s3-website-us-east-1.amazonaws.com, mất mọi thông tin cụ thể mà đường dẫn chứa.

Tùy chọn của tôi là gì? Có cách nào để sử dụng S3 và có URL hoạt động không? Tôi có cần một máy chủ không? Hay có cách tiếp cận nào khác đã lảng tránh tôi?

+0

Tôi đang tạo 'ember build --environment = production' rồi sao chép thư mục' dist' sang S3. Tôi chỉ sử dụng máy chủ nút cho chế độ dev cục bộ. (Làm thế nào S3 phục vụ các tập tin mà tôi không biết.) –

+0

Vui vì bạn đã làm việc đó! Tôi sẽ xóa các bình luận trước đó. :) – Hrishi

Trả lời

4

OK, tôi đã thân thiết. Chỉ ra rằng cách tiếp cận đúng là:

http://my-bucket.s3-website-us-east-1.amazonaws.com/#/elephants/5

Tôi đã cố gắng tiếp cận khác nhau, nhưng không ai trong số họ đã được chính xác một # không có !, và bao quanh bởi /. đọc có liên quan là tài liệu trên location

Điều đáng chú ý là tôi đang sử dụng:

App.Router.reopen({ 
    location: 'auto' 
}); 

Ngoài ra, tôi đang sử dụng như sau RoutingRules dưới Website Hosting

<RoutingRules> 
    <RoutingRule> 
     <Condition> 
      <HttpErrorCodeReturnedEquals>403</HttpErrorCodeReturnedEquals> 
     </Condition> 
     <Redirect> 
      <HostName>my-bucket.s3-website-us-east-1.amazonaws.com</HostName> 
      <ReplaceKeyPrefixWith>#/</ReplaceKeyPrefixWith> 
     </Redirect> 
    </RoutingRule> 
</RoutingRules> 
+0

Vậy điều đó có nghĩa là không thể có các ứng dụng Ember trong sản xuất mà không có băm nhỏ "gây phiền nhiễu" này ở gốc của đường dẫn? – cwarny

+0

Tôi nghĩ rằng tôi đã chia sẻ tất cả những gì tôi biết ở đây, nếu bạn đã đọc nội dung của liên kết. –

+0

Tôi đã đọc tài liệu, nhưng thiết lập 'App.Router.reopen ({location: 'history'});' hoặc 'App.Router.reopen ({location: 'auto'});' không làm việc cho tôi. Chỉ có 'hash' đã làm các trick và tôi không hiểu tại sao hoặc nếu có một số thao tác bổ sung tôi cần phải làm điều đó không được chỉ định trong tài liệu liên kết. Nó nói mặc dù 'Hãy nhớ rằng kể từ khi một số người dùng của bạn sẽ sử dụng HistoryLocation, máy chủ của bạn phải phục vụ các ứng dụng Ember ở tất cả các tuyến đường mà bạn xác định.' nhưng điều đó có vẻ khó xử với tôi. – cwarny

2

Chỉ cần tĩnh tạo bản đồ Tài liệu Lỗi thành index.html & vị trí của bạn nên được đặt thành tự động. http://i.stack.imgur.com/qbAov.png

+0

Dựa trên SO này (http://stackoverflow.com/a/16979716/4533488), giải pháp này có một số lá cờ đỏ gắn liền với nó, nghĩa là nó không phải là một giải pháp tuyệt vời. – aero

5

Có vài vấn đề với cách tiếp cận chỉ có chuyển hướng dựa trên #. Tôi đã liệt kê chúng bên dưới:

  1. Chuyển hướng Mutliple xảy ra khi đường dẫn ứng dụng của bạn được giải quyết. Ví dụ: www.myapp.com/path/for/test được chuyển hướng dưới dạng www.myapp.com/#/path/for/test
  2. Có một nhấp nháy trong thanh url khi '#' đến và đi đến hạn hành động của khuôn khổ SPA của bạn.
  3. Seo bị ảnh hưởng bởi vì - 'Này! Google của nó buộc bàn tay của mình trên chuyển hướng '
  4. Hỗ trợ Safari cho ứng dụng của bạn sẽ bị quăng.

cách tiếp cận Một đột biến ra khỏi phương pháp triển khai chủ trương Lightening với Ember-CLI-Triển khai thực hiện như sau:

  1. Hãy chắc chắn rằng bạn có các tuyến đường chỉ số cấu hình cho trang web của bạn. Chủ yếu là index.html
  2. Xóa quy tắc định tuyến khỏi cấu hình S3
  3. Đặt Cloudfront trước thùng S3 của bạn.
  4. Định cấu hình quy tắc trang lỗi cho phiên bản Cloudfront của bạn. Trong các quy tắc lỗi ghi rõ:
    • Http mã lỗi: 404 (và 403 hoặc các lỗi khác theo nhu cầu)
    • Lỗi Caching tối thiểu TTL (giây): 0
    • Tùy chỉnh phản ứng: Có
    • đáp ứng trang đường dẫn: /index.html
    • HTTP Response Code: 200

5.For SEO nhu cầu + đảm bảo index.h của bạn tml không cache, hãy làm như sau:

  • Định cấu hình EC2 và thiết lập máy chủ nginx.
  • Gán IP công khai cho phiên bản EC2 của bạn.
  • Tạo một ELB có cá thể EC2 mà bạn đã tạo làm ví dụ
  • Bạn sẽ có thể gán ELB cho DNS của mình.
  • Bây giờ, hãy định cấu hình máy chủ nginx của bạn để thực hiện những việc sau: Proxy_pass tất cả các yêu cầu tới CDN của bạn (chỉ với index.html, phân phát các nội dung khác trực tiếp từ đám mây của bạn) và cho các bot tìm kiếm, chuyển hướng lưu lượng truy cập theo quy định của dịch vụ như Trình đơn trước. io

Tôi có thể trợ giúp thêm chi tiết về thiết lập nginx, chỉ để lại ghi chú. Đã học được nó một cách khó khăn.

Sau khi cập nhật phân phối trên đám mây. Vô hiệu hóa bộ nhớ cache trên đám mây của bạn một lần để ở chế độ nguyên sơ. Truy cập url trong trình duyệt và tất cả sẽ tốt.

+0

> dành cho các bot tìm kiếm, chuyển hướng lưu lượng truy cập theo quy định của các dịch vụ như Prerender.io Bạn có đang sử dụng kết xuất trước không.io hoặc chuyển hướng chương trình sang một số loại bộ nhớ cache khác? Tôi đã xem cấu hình nginx để chuyển hướng tại đây https://gist.github.com/thoop/8165802 – freedrull

+0

Đầu tiên duy trì bộ nhớ cache của chính nó trừ khi bạn quyết định cài đặt tiền đề. Cấu hình bạn đã chia sẻ - Tôi sử dụng một cái gì đó tương tự trong nginx của tôi để phục vụ các yêu cầu bot. Nó không phải là một chuyển hướng xảy ra nhưng giống như một yêu cầu proxy chuyển tiếp để nhận được phản hồi từ bộ đệm ẩn trước. – moha297

+0

Cảm ơn tôi sẽ thử nó !! – freedrull

Các vấn đề liên quan