Actualmente estoy usando Compass con Heroku usando este configuration recomendado en la base de conocimiento de Heroku. Heroku tiene un sistema de archivos de solo lectura, por lo que las hojas de estilo compiladas deben almacenarse en/tmp. Esto funciona bien de forma remota en Heroku; localmente, sin embargo, Rails espera encontrar hojas de estilo en/public/stylesheets (cuando se llama a través del = stylesheet_link_tag 'screen.css', :media => 'screen, projection'
).Uso de Compass en Heroku:/tmp para hojas de estilo de forma remota y local
Para resolver el problema, he creado enlaces simbólicos en/public/stylesheets usando ln -s tmp/stylesheets/screen.css public/stylesheets/screen.css
y eso parece funcionar.
¿Hay alguna manera de resolver este problema sin usar enlaces simbólicos, quizás cambiando alguna configuración en Rails? He hurgado sin mucho éxito.
Aquí es mi config/inicializadores/compass.rb:
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")
Y aquí es mi 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
Cualquier ayuda sería muy apreciada.
¿Funciona esto con rails3? – anka
Sí, estoy en Rails 3.0.5. – jdc
Una cosa que no entiendo en esta solución es por qué está cambiando el "sass_dir" basado en el entorno. ¿No es aquí donde están almacenados los archivos de origen? ¿Por qué sería diferente en prod/heroku que en dev? Además, está llamando a Compass :: AppIntegration :: Rails.initialize! dos veces. –