2013-08-25 28 views
8

Tôi đang cố định cấu hình máy chủ apache của mình để phân phát nội dung tĩnh từ ứng dụng đường ray của mình. Tôi đã thử các cấu hình được đề xuất nhưng tài sản của tôi vẫn không được hiển thị và khi cố gắng truy cập trực tiếp, tôi chỉ gặp lỗi đường ray mà không tìm thấy bộ điều khiển phù hợp nhưng nội dung tài sản sẽ được apache trực tiếp xử lý. Cấu hình apache của tôi trông giống như sau:Apache sẽ không tài sản tĩnh máy chủ cho ứng dụng đường ray

<VirtualHost *:80> 
ServerName xxx 
DocumentRoot /home/xxx/test/public 
PassengerEnabled off 

<LocationMatch "^/assets/.*$"> 
Header unset ETag 
FileETag None 
ExpiresActive On 
ExpiresDefault "access plus 1 year" 
</LocationMatch> 
ProxyPass/http://127.0.0.1:9292/ 
ProxyPassReverse/http://127.0.0.1:9292/ 
</VirtualHost> 

Tôi đã bỏ lỡ điều gì chưa?

+0

tài sản, như trong .css? Bạn đã làm một cái cào vào thư mục công cộng/tài sản chưa? – clyde

+0

vâng tôi đã biên soạn tài sản của mình và tất cả chúng đều ở vị trí – soupdiver

+0

Bạn có thể sửa lỗi này không? – nathanvda

Trả lời

0

tôi đã sử dụng,

RAILS_ENV=production bundle exec rake assets:precompile 

Để làm cho nó tất cả công việc đúng, tôi đã thêm này để config/application.rb ... custom.css.scss

module MyApp 
    class Application < Rails::Application 
. 
. 
    config.assets.precompile += ['custom.css']  
    config.assets.precompile += %w(*.png *.jpg *.jpeg *.gif) 
. 
. 
    end 
end 

(tôi đã tạo ra. Nhưng Rails không nhận ra .scss, như bạn thấy ở trên.) Tôi giả định rằng tất cả các tài sản của bạn đang xuất hiện trong thư mục public/assets sau khi biên dịch trước. Tôi không hiểu những gì bạn đang làm với LocationMatch, tha thứ cho sự thiếu hiểu biết của tôi. Hơn nữa, tôi không sử dụng cổng 80. Tôi đã sử dụng 8000. Không chắc chắn nếu điều đó tạo ra sự khác biệt.

Ngoài ra, có một thiết lập trong config/môi trường/production.rb,

# Disable Rails's static asset server (Apache or nginx will already do this). 
config.serve_static_assets = false 
+2

xin lỗi nhưng điều này không thực sự phù hợp với câu hỏi của tôi. Tôi đã thực hiện tất cả các bước mà bạn đề cập nhưng nếu tôi hiểu rằng các đường ray phải KHÔNG được tham gia khi phục vụ tài sản. Apache nên tự làm điều này. Và đó là 'LocationMatch'. Nhưng đường ray vẫn xử lý các yêu cầu đến thư mục tài sản cần được thực hiện trực tiếp bằng apache – soupdiver

0

Đây là trực tiếp từ tài liệu Rails Asset-đường ống liên quan đến máy chủ Apache:

http://guides.rubyonrails.org/asset_pipeline.html

4.1.1 Tương lai hết hạn trong tương lai Tiêu đề

Tài sản biên dịch tồn tại trên hệ thống tệp và được máy chủ web của bạn phân phối trực tiếp. Chúng không có tiêu đề tương lai xa theo mặc định, vì vậy để có được lợi ích của việc lấy dấu vân tay, bạn sẽ phải cập nhật cấu hình máy chủ của mình để thêm các tiêu đề đó.

Đối với Apache:

# The Expires* directives requires the Apache module 
# `mod_expires` to be enabled. 
<Location /assets/> 
    # Use of ETag is discouraged when Last-Modified is present 
    Header unset ETag 
    FileETag None 
    # RFC says only cache for 1 year 
    ExpiresActive On 
    ExpiresDefault "access plus 1 year" 
</Location> 
Các vấn đề liên quan