2010-10-20 25 views
3

J'ai un site nanoc (donc, toutes les pages statiques) que j'aimerais tester avec unicorn. L'idée derrière ceci est d'héberger ce site sur heroku alors. La structure est alors une application en rack. J'ai ajouté un fichier config.ru comme:site nanoc testé avec licorne

require 'rubygems' 
require 'rack' 
require 'rack-rewrite' 
require 'rack/contrib' 
use Rack::Rewrite do 
rewrite '/','/output/index.html' 
end 
use Rack::Static, :urls => ['/'], :root => "output" 

(toutes mes ressources statiques sont situés dans le répertoire de sortie)

Quand je lance la licorne je reçu le message d'erreur suivant:

NoMethodError at /output/index.html 
undefined method `to_i' for #<Rack::Static:0x10165ee18> 

Je ne comprends pas vraiment ce que je suis absent ici :(

Toute idée?

Merci et salutations,

Luc

Répondre

1

avec ce config.ru, il fonctionne :)

require 'rubygems' 
require 'rack' 
require 'rack/contrib' 
require 'rack-rewrite' 
require 'mime/types' 

use Rack::Deflater 
use Rack::ETag 
module ::Rack 
    class TryStatic < Static 

     def initialize(app, options) 
      super 
      @try = ([''] + Array(options.delete(:try)) + ['']) 
     end 

     def call(env) 
      @next = 0 
      while @next < @try.size && 404 == (resp = super(try_next(env)))[0] 
       @next += 1 
      end 
      404 == resp[0] ? @app.call : resp 
     end 

     private 
     def try_next(env) 
      env.merge('PATH_INFO' => env['PATH_INFO'] + @try[@next]) 
     end 
    end 
end 

use Rack::TryStatic, 
    :root => "output", # static files root dir 
    :urls => %w[/], # match all requests 
    :try => ['.html', 'index.html', '/index.html'] # try these postfixes sequentially 

errorFile='output/404.html' 
run lambda { [404, { 
      "Last-Modified" => File.mtime(errorFile).httpdate, 
      "Content-Type" => "text/html", 
      "Content-Length" => File.size(errorFile).to_s 
     }, File.read(errorFile)] } 

Cordialement, Luc

+0

de Nice! J'étais curieux aussi et heureux de votre succès. Pendant ce temps, je trouve [this] (http://teachmetocode.com/screencasts/faking-sinatra-with-rack-and-metaprogramming/) et a été utile, pour moi au moins :) – kfl62

+0

Bonjour, ceci est un morceau de code I trouvé sur le net. Merci pour votre lien !!! – Luc