หากคุณมี Ruby ในระบบของคุณคุณสามารถทำได้:
http://unixgods.org/~tilo/Ruby/Using_Variables_in_CSS_Files_with_Ruby_on_Rails.html
สิ่งนี้ถูกสร้างขึ้นสำหรับ Rails แต่ดูด้านล่างสำหรับวิธีการแก้ไขเพื่อให้ทำงานได้อย่างอิสระ
คุณสามารถใช้วิธีนี้ได้อย่างอิสระจาก Rails โดยการเขียนสคริปต์ Ruby wrapper ขนาดเล็กซึ่งทำงานร่วมกับ site_settings.rb และนำ CSS-path ของคุณไปใช้และคุณสามารถโทรได้ทุกครั้งที่คุณต้องการสร้าง CSS ขึ้นมาใหม่ (เช่น ระหว่างการเริ่มต้นไซต์)
คุณสามารถรัน Ruby บนระบบปฏิบัติการใด ๆ ก็ได้ดังนั้นนี่ควรเป็นแพลตฟอร์มที่ค่อนข้างอิสระ
เช่น wrapper: generate_CSS.rb (เรียกใช้สคริปต์นี้เมื่อใดก็ตามที่คุณต้องการสร้าง CSS ของคุณ)
#/usr/bin/ruby # preferably Ruby 1.9.2 or higher
require './site_settings.rb' # assuming your site_settings file is on the same level
CSS_IN_PATH = File.join( PATH-TO-YOUR-PROJECT, 'css-input-files')
CSS_OUT_PATH = File.join( PATH-TO-YOUR-PROJECT, 'static' , 'stylesheets' )
Site.generate_CSS_files( CSS_IN_PATH , CSS_OUT_PATH )
วิธี generate_CSS_files ในsite_settings.rbต้องแก้ไขดังนี้:
module Site
# ... see above link for complete contents
# Module Method which generates an OUTPUT CSS file *.css for each INPUT CSS file *.css.in we find in our CSS directory
# replacing any mention of Color Constants , e.g. #SomeColor# , with the corresponding color code defined in Site::Color
#
# We will only generate CSS files if they are deleted or the input file is newer / modified
#
def self.generate_CSS_files(input_path = File.join( Rails.root.to_s , 'public' ,'stylesheets') ,
output_path = File.join( Rails.root.to_s , 'public' ,'stylesheets'))
# assuming all your CSS files live under "./public/stylesheets"
Dir.glob( File.join( input_path, '*.css.in') ).each do |filename_in|
filename_out = File.join( output_path , File.basename( filename_in.sub(/.in$/, '') ))
# if the output CSS file doesn't exist, or the the input CSS file is newer than the output CSS file:
if (! File.exists?(filename_out)) || (File.stat( filename_in ).mtime > File.stat( filename_out ).mtime)
# in this case, we'll need to create the output CSS file fresh:
puts " processing #{filename_in}\n --> generating #{filename_out}"
out_file = File.open( filename_out, 'w' )
File.open( filename_in , 'r' ).each do |line|
if line =~ /^\s*\/\*/ || line =~ /^\s+$/ # ignore empty lines, and lines starting with a comment
out_file.print(line)
next
end
while line =~ /#(\w+)#/ do # substitute all the constants in each line
line.sub!( /#\w+#/ , Site::Color.const_get( $1 ) ) # with the color the constant defines
end
out_file.print(line)
end
out_file.close
end # if ..
end
end # def self.generate_CSS_files
end # module Site