2013-08-25 4 views
8

के लिए स्थैतिक संपत्ति सर्वर नहीं करेगा, मैं अपने रेल ऐप से स्थिर संपत्तियों की सेवा के लिए अपना अपाचे सर्वर कॉन्फ़िगर करने का प्रयास कर रहा हूं। मैंने पहले से ही सुझाए गए कॉन्फ़िगरेशन की कोशिश की है, लेकिन मेरी संपत्तियां अभी भी दिखाई नहीं दे रही हैं और उन्हें सीधे एक्सेस करने का प्रयास करते समय मुझे एक रेल त्रुटि मिली है कि कोई मिलान करने वाला नियंत्रक नहीं मिला है लेकिन संपत्ति सामान को सीधे अपाचे द्वारा संभाला जाना चाहिए। मेरे अपाचे विन्यास इस तरह दिखता है:अपाचे रेल ऐप

<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> 

क्या मैं कुछ याद किया?

+0

आस्तियों,? क्या आपने सार्वजनिक/संपत्ति फ़ोल्डर में रेक किया है? – clyde

+0

हाँ मैंने अपनी संपत्ति संकलित की है और वे सभी जगह पर हैं – soupdiver

+0

क्या आप इसे ठीक करने में सक्षम थे? – nathanvda

उत्तर

0

मैं इस्तेमाल किया,

RAILS_ENV=production bundle exec rake assets:precompile 

यह सब काम सही बनाने के लिए, मैं config/application.rb को यह जोड़ा ...

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

(मैं बनाया था custom.css.scss। लेकिन रेल ने एसएसएसएस को पहचान नहीं लिया, जैसा कि आप ऊपर देखते हैं।) मुझे लगता है कि आपकी सभी संपत्ति प्रीकंपाइल के बाद सार्वजनिक/संपत्ति फ़ोल्डर में दिखाई दे रही है। मुझे समझ में नहीं आता कि आप LocationMatch के साथ क्या कर रहे हैं, मेरी अज्ञानता को क्षमा करें। और भी, मैंने पोर्ट 80 का उपयोग नहीं किया। मैंने 8000 का उपयोग किया। सुनिश्चित नहीं है कि इससे कोई फर्क पड़ता है।

इसके अलावा

, वहाँ config/वातावरण/production.rb में एक सेटिंग है,

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

क्षमा करें, लेकिन यह वास्तव में मेरे प्रश्न के अनुरूप नहीं है। मैंने आपके द्वारा उल्लेख किए गए सभी चरणों का पालन किया है, लेकिन यदि मुझे समझ में आया कि संपत्ति की सेवा करते समय सही रेल शामिल नहीं होनी चाहिए। अपाचे को इसे स्वयं करना चाहिए। और 'लोकेशन मैच' के लिए भी है। लेकिन रेल अभी भी परिसंपत्ति निर्देशिका के अनुरोधों को संभालने में सक्षम हैं जो सीधे अपाचे द्वारा किया जाना चाहिए – soupdiver

0

यह अपाचे सर्वर के बारे में रेल संपत्ति-पाइपलाइन प्रलेखन से सीधे है:

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

4.1.1 सुदूर भविष्य का समय हैडर

प्रीकंपील्ड संपत्तियां मौजूद हैं फ़ाइल सिस्टम पर और सीधे आपके वेब सर्वर द्वारा परोसा जाता है। उनके पास डिफ़ॉल्ट रूप से दूर-भविष्य के शीर्षलेख नहीं हैं, इसलिए फिंगरप्रिंटिंग का लाभ प्राप्त करने के लिए आपको उन शीर्षकों को जोड़ने के लिए अपने सर्वर कॉन्फ़िगरेशन को अपडेट करना होगा।

अपाचे के लिए:

.css में के रूप में
# 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> 
संबंधित मुद्दे