2011-03-22 8 views
5

मैं वर्तमान में हेरोोकू ज्ञान आधार पर अनुशंसित configuration का उपयोग कर हेरोकू के साथ कम्पास का उपयोग कर रहा हूं। हेरोकू में केवल पढ़ने योग्य फ़ाइल सिस्टम है, और इसलिए संकलित स्टाइलशीट को/tmp में संग्रहीत करने की आवश्यकता है। यह हेरोोकू पर दूरस्थ रूप से ठीक काम करता है; स्थानीय रूप से, हालांकि, रेल को स्टाइलशीट/सार्वजनिक/स्टाइलशीट में ढूंढने की उम्मीद है (जब = stylesheet_link_tag 'screen.css', :media => 'screen, projection' के माध्यम से बुलाया जाता है)।हरोकू पर कम्पास का उपयोग करना:/tmp स्टाइलशीट्स के लिए दूरस्थ रूप से और स्थानीय रूप से

समस्या को हल करने के लिए, मैंने ln -s tmp/stylesheets/screen.css public/stylesheets/screen.css का उपयोग करके/सार्वजनिक/स्टाइलशीट में प्रतीकात्मक लिंक बनाए हैं और ऐसा लगता है कि यह काम करता है।

क्या प्रतीकात्मक लिंक का उपयोग किए बिना इस समस्या को हल करने का कोई तरीका है, शायद रेल में कुछ कॉन्फ़िगरेशन बदलकर? मैंने बिना किसी सफलता के चारों ओर पोक किया है।

require 'compass' 
require 'compass/app_integration/rails' 
Compass::AppIntegration::Rails.initialize! 

# Required for Heroku: 
require 'fileutils' 
FileUtils.mkdir_p(Rails.root.join("tmp", "stylesheets")) 

Compass::AppIntegration::Rails.initialize! 

Rails.configuration.middleware.delete('Sass::Plugin::Rack') 
Rails.configuration.middleware.insert_before('Rack::Sendfile', 'Sass::Plugin::Rack') 

Rails.configuration.middleware.insert_before('Rack::Sendfile', 'Rack::Static', 
    :urls => ['/stylesheets'], 
    :root => "#{Rails.root}/tmp") 

और यहाँ मेरे config/compass.rb है:

project_type = :rails 
project_path = Compass::AppIntegration::Rails.root 

# Set this to the root of your project when deployed: 
http_path = "/" 

# Necessary for Heroku (original commented out: 
css_dir = 'tmp/stylesheets' 
#css_dir = "public/stylesheets/compiled" 

sass_dir = 'app/views/stylesheets' 

environment = Compass::AppIntegration::Rails.env 

किसी भी मदद की बहुत सराहना की जाएगी

यहाँ मेरी config/initializers/compass.rb है।

उत्तर

5

मैं वास्तव में हमारे रेल एप्लिकेशन के साथ कम्पास स्थापित करने वाला था, जिसे हेरोकू पर होस्ट किया गया है, इसलिए मुझे इस के माध्यम से काम करने का बहाना देने के लिए उत्साह है। :)

जवाब सरल है:

संशोधित करें 'config/compass.rb':

require 'compass' 
require 'compass/app_integration/rails' 
Compass::AppIntegration::Rails.initialize! 

require 'fileutils' 
FileUtils.mkdir_p(Rails.root.join("tmp", "stylesheets")) 

environment = Compass::AppIntegration::Rails.env 
if environment == 'production' 
    Compass::AppIntegration::Rails.initialize! 

    Rails.configuration.middleware.delete('Sass::Plugin::Rack') 
    Rails.configuration.middleware.insert_before('Rack::Sendfile', 'Sass::Plugin::Rack') 

    Rails.configuration.middleware.insert_before('Rack::Sendfile', 'Rack::Static', 
     :urls => ['/stylesheets'], 
     :root => "#{Rails.root}/tmp") 
end 

:

project_type = :rails 
project_path = Compass::AppIntegration::Rails.root 

http_path = "/" 

environment = Compass::AppIntegration::Rails.env 
if environment == 'production' 
    css_dir = "tmp/stylesheets" 
    sass_dir = "app/views/stylesheets" 
else 
    css_dir = "public/stylesheets" 
    sass_dir = "app/stylesheets" 
end 

फिर 'config/initializers/compass.rb' संशोधित ... और voila, तुम अच्छे हो।

+0

क्या यह रेल 3 के साथ काम करता है? – anka

+0

हां - मैं रेल 3.0.5 पर हूं। – jdc

+2

एक बात जो मैं इस समाधान में समझ में नहीं आता है, यही कारण है कि आप पर्यावरण के आधार पर "sass_dir" बदल रहे हैं। क्या यह नहीं है कि आप स्रोत फाइलें संग्रहीत हैं? देव में प्रोड/होकोकू में यह अलग क्यों होगा? इसके अलावा, आप कम्पास :: ऐप इंटीग्रेशन :: Rails.in आरंभ कर रहे हैं! दो बार। –

3

ठीक है, मैं एक बड़ी Heroku और कम्पास प्रशंसक अपने आप को तो मैं यह कई बार

Heroku के डॉक्स

के माध्यम से किया गया है कर रहा हूँ, जबकि सही जानकारी देने के, इस उदाहरण में गरीब सलाह प्रदान करते हैं।

कंपास का उपयोग करते समय, सबसे अच्छी बात यह है कि 99.9 99% समय उत्पादन उत्पादन में बंद हो जाता है।

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

यदि आप सर्वर पर कंपास को संकलित करने की अनुमति देते हैं तो आपको एक उचित आकार के प्रदर्शन हिट का सामना करना पड़ेगा।

आप अपने ऐप के आधार पर एक config.ru फ़ाइल होनी चाहिए:

तो यहाँ मैं क्या कर रहा है। यह खोलें और निम्न जोड़ें:

require 'sass/plugin/rack' 
use Sass::Plugin::Rack 
Sass::Plugin.options[:never_update] = true 

तब आप अपने प्रारंभकर्ता (विशेष रूप से हिस्सा जहां सास :: प्लगइन :: रैक उतारना) से काफी कोड का एक बहुत हटा सकते हैं। इसके अतिरिक्त आप, config फ़ोल्डर

इसके बारे में सोचो में compass.rb से अगर बयान हटाना चाह सकते हैं तुम क्यों सास सर्वर पर एक स्टाइलशीट संकलित करने के लिए चाहेगा? यह सिर्फ प्रसंस्करण शक्ति खाता है।आशा है कि इस मदद करता है,

संपादित :: पुनश्च - मैं जोड़ने चाहिए कि आप अपने देव वातावरण

+0

सर्वर पर संकलन नहीं करना एक उचित रणनीति प्रतीत होता है, यह देखते हुए कि सर्वर पर सीएसएस फ़ाइलें कभी भी नहीं बदली जातीं (क्या यह केवल एक बार संकलित होती है, या हर बार यह चलती है?)। किसी भी मामले में, मैंने आपके समाधान को लागू करने की कोशिश की (इसे सुझाव देने के लिए धन्यवाद), लेकिन एक सामान्य क्रैश (कोड ई 10) के साथ समाप्त हुआ। क्या आप मुझे अपना config.ru और अन्य तत्व दिखाना चाहते हैं जो आपके समाधान को लागू करने के लिए बदलना चाहिए? – CuriousYogurt

+0

यह एक दिलचस्प विचार है; लेकिन मुझे यकीन नहीं है, अंतिम विश्लेषण में, इसे कैसे लाया जाए। अगर कोई करता है, तो मुझे बताएं। – CuriousYogurt

+0

यह हमारे लिए काम किया। हम संपत्तियों को पैकेज करने के लिए जैमिट का उपयोग करते हैं, इसलिए हमें सैस संकलन की आवश्यकता नहीं है। हमने ऊपर दिए गए सुझाव को एक if (ENV ['RACK_ENV'] || 'विकास') में जोड़ा है! = 'विकास') और इसे config.ru में डाल दें। –

0

सिफारिश Heroku विन्यास होगा में संकलित करने के लिए अपने स्टाइलशीट पाने के लिए अब क्रम में कमांड लाइन से compass watch चलाने की आवश्यकता होगी स्थानीय रूप से भी काम करते हैं।

  1. दूसरे 'कम्पास :: AppIntegration :: Rails.in आरंभ करें!' कॉन्फ़िगर/प्रारंभकर्ता/compass.rb से, आपको केवल एक बार इसकी आवश्यकता है।
  2. सुनिश्चित करें कि आपका एससीएसएस फ़ाइलों की ऐप्लिकेशन/विचारों/स्टाइलशीट '

दोनों स्थानीय और उत्पादन सर्वर स्टाइलशीट tmp/स्टाइलशीट करने के लिए संकलित किया जाएगा पर, और के लिए एक अनुरोध/स्टाइलशीट tmp/stylesheest हो जाएगी में हैं । दो अलग विन्यास के लिए कोई ज़रूरत नहीं है।

संबंधित मुद्दे