कोई भी मार्ग [GET] / परिसंपत्तियों से मेल नहीं खाता


143

मेरे पास एक रेल एप्लिकेशन है जिसे मैं उत्पादन वातावरण में परीक्षण करने की कोशिश कर रहा हूं। मैंने दौड़ लगाई RAILS_ENV=production rake assets:precompileजो मेरी सभी संपत्ति / सार्वजनिक / परिसंपत्तियों में उत्पन्न हुई। समस्या यह है कि जब मैं अपना ऐप w शुरू करता हूं / RAILS_ENV=production rails s thinमुझे मिलता है:

ActionController::RoutingError (No route matches [GET] "/assets/application-eff78fd67423795a7be3aa21512f0bd2.css"):

हालांकि यह फ़ाइल मौजूद है /public/assets/application-eff78fd67423795a7be3aa21512f0bd2.css

किसी भी विचार के रूप में मैं यह क्यों कर रहा हूँ RoutingError?

जवाबों:


230

उत्पादन मोड में, स्थैतिक संपत्ति की सेवा के लिए रेल जिम्मेदार नहीं होंगे। इसलिए, आपको यह त्रुटि मिल रही है। यह या तो ऐसा नहीं करेगा, क्योंकि यह केवल रेल के आसपास एक आवरण है।

यह config/environments/production.rbआपके एप्लिकेशन में इस सेटिंग द्वारा नियंत्रित किया जाता है :

config.serve_static_files = false

या रेल में 5:

# config/environments/production.rb
config.public_file_server.enabled = true

या ENV['RAILS_SERVE_STATIC_FILES']सच पर सेट है।

आप या तो उस पर सेट कर सकते हैं या trueApache या Nginx जैसे एक वास्तविक सर्वर का उपयोग कर सकते हैं जो स्थैतिक संपत्ति की सेवा करेगा। मुझे शक है कि पाव भी ऐसा कर सकता है।


यदि आप हरोकू पर हैं, तो वे rails_12factorमणि के उपयोग की सलाह देते हैं जो इस सेटिंग को डिफ़ॉल्ट रूप से सक्षम करता है। मणि को productionअपने समूह में रखें Gemfile, जैसे:

group :production do
  gem 'rails_12factor'
end

5
किसी को पता है कि क्या यह उक्त समस्या का समाधान है, जब उसे हरोकू में तैनात किया जाता है?
काइल क्लेग

स्पष्ट उत्तर, बहुत धन्यवाद। मुझे इस पृष्ठ पर मिला क्योंकि मैं thinअपने विकास मशीन का उपयोग करके उत्पादन वातावरण का परीक्षण कर रहा था । मैं संपत्ति संकलित कर रहा था, लेकिन application.cssखाली था और सर्वर लॉग ने ओपी की त्रुटि दी।
veritas1

2
रेल 4 में यह होगा config.serve_static_filesconfig.serve_static_assetsपदावनत किया गया है और रेल 5 में हटा दिया जाएगा।
संपी

आरएचईएल वितरण में तैनात, मैंने डिफ़ॉल्ट पर्यावरण कॉन्फ़िगरेशन को नहीं छुआ है, बस रेल v4.2.4 में rails_12factor रत्न जोड़ा है, अब सब कुछ ठीक है। बहुत बहुत धन्यवाद
Onur Kucukkece

1
@ ऑनर: इसका मतलब है कि आपके रेल एप्लिकेशन आपके वेबसर्वर के बजाय संपत्ति की सेवा करेंगे। मैं इस कॉन्फ़िगरेशन की अनुशंसा बिल्कुल नहीं करता क्योंकि यह आपके रेल सर्वर को धीमा बना सकता है।
रयान बिग

12

ऊपर रेयान ने जो कहा, उसे जोड़ते हुए, रेल्स एसेट पाइपलाइन गाइड बताता है कि अपाचे या नग्नेक्स को आप के लिए स्थैतिक संपत्ति की सेवा कैसे सेट करें।

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

वास्तव में स्थैतिक संपत्ति की सेवा के लिए आपको nginx या Apache को सेटअप करना चाहिए, क्योंकि वे इस कार्य के लिए mongrel / thin / unornorn से बेहतर अनुकूलित हैं।


7

बस उसी समस्या को हल किया। मेरे मामले में रेयान का जवाब मददगार नहीं था। Bratsche ने रेल गाइड की ओर इशारा किया, दुर्भाग्य से यह मेरे लिए भी काम नहीं किया। हालाँकि संसाधन मददगार था। इसलिए मैंने वहां से Nginx कॉन्फ़िगरेशन लिया और सार्वजनिक निर्देशिका की ओर इशारा करते हुए मूल निर्देश को जोड़ा । इसके बिना यह काम नहीं करता है।

   # serve static assets
   location ~ ^/assets/ {
     expires 1y;
     root  /path/to/my/cool_project/public;
     add_header Cache-Control public;

     add_header ETag "";
     break;
   }

Nginx को पुनरारंभ करें, और यह बात है।


3

वास्तव में आपको किसी भी डिफ़ॉल्ट कॉन्फ़िगरेशन को संशोधित करने की आवश्यकता नहीं थी। आप बस फिर से सम्पत्ति फ़ाइल को फिर से बनाएँ

सार्वजनिक / संपत्ति को हटा दें

1.अर्द्ध संपत्ति: क्लोबर R नाखून_ENV = उत्पादन

संपत्ति संकलित करें

2.अर्द्ध परिसंपत्तियाँ: पूर्वसर्ग R नाखून_ENV = उत्पादन

3. सर्स्ट सर्वर, उदाहरण के लिए (nginx)


@ स्टीवो 7, जाहिर तौर पर, रेल्स डिफॉल्ट रूप से देव मोड में असेट्स पिपललाइन का उपयोग करते हैं।
अल्बर्ट .Qing

2

रेल्स 4.2 ने इस लाइन को आपके कॉन्फिगर / वातावरण / staging.rb और production.rb फ़ाइलों में जोड़ा / बदल दिया है:

config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present?

यदि RIDS_SERVE_STATIC_FILES सेट नहीं है, और आप अपने रेल सर्वर (यूनिकॉर्न के साथ) से सेवा संपत्ति हैं, तो यह "झूठा" के लिए डिफ़ॉल्ट होगा, और RoutingError घटित होगी।

यह एक आसान तय है:

config.serve_static_files = true

धन्यवाद, यह सबसे सरल विकल्प है। कॉन्फ़िगरेशन आमतौर पर सर्वर वातावरण पर निर्भर करता है और इसे एन-चर के साथ कॉन्फ़िगर करने योग्य है।
akostadinov

2

रेल 5 में, config.serve_static_filesविकल्प बदल गया है, इसलिए अब आपके पास होना चाहिए

config.public_file_server.enabled = true

स्थानीय स्तर पर संपत्ति की सेवा करने के लिए।


2

नीचे दिए गए कोड का प्रयास करें:

config / वातावरण / production.rb

config.assets.compile = true

फिर कमांड चलाएं:

RAILS_ENV=production rake assets:precompile

फिर सभी संकलित फ़ाइलों और मैनिफ़ेस्ट फ़ाइल को सर्वर पर धकेलें।


1

मैं अपने रेल 5 एप्लिकेशन को तैनात करने के लिए मीना + प्यूमा + नगनेक्स का उपयोग करता हूं, मुझे मिला

ActionController::RoutingError (No route matches [GET] "/assets/application-658cf2ab3ac93aa5cb41a762b52cf49d7184509c307922cd3fbb61b237a59c1a.css")

check config / environment / production.rb

# Disable serving static files from the `/public` folder by default since
# Apache or NGINX already handles this.
config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?

NGINX पहले से ही इसे संभालता है , इसे संक्षिप्त रूप से कॉन्फ़िगर करता है

upstream puma {
  server unix:///home/deploy/apps/appname/shared/tmp/sockets/appname-puma.sock;
}

server {
  listen 80 default_server deferred;
  # server_name example.com;

  root /home/deploy/apps/appname/current/public;
  access_log /home/deploy/apps/appname/current/log/nginx.access.log;
  error_log /home/deploy/apps/appname/current/log/nginx.error.log info;

  location ^~ /assets/ {
    gzip_static on;
    expires max;
    add_header Cache-Control public;
  }

  try_files $uri/index.html $uri @puma;
  location @puma {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;

    proxy_pass http://puma;
  }

  error_page 500 502 503 504 /500.html;
  client_max_body_size 10M;
  keepalive_timeout 10;
}

चीजें ठीक होंगी।


1

अगर कोई मुझे परीक्षा के माहौल में उसी त्रुटि के साथ मिलता है जैसा कि मैं करता हूं, तो यहां मुझे मदद मिली:

rails assets:clobber assets:precompile RAILS_ENV=test

फिर:

ps axu | grep your-username

spring serverप्रक्रिया और उसके PID को खोजने के लिए फिर उसे मारें:

kill <spring-server-PID>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.