Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    host_with_port in rails

    ciao a tutti...scusate se continuo a disturbarvi,ma mi trovo in difficoltà con questo metodo,non riesco ad utilizzarlo.Mi serve nel reindirizzare il logout di rubycas...Quando lo richiamo in "config/environment.rb" naturalmente mi dice " undefined method 'host_with_port' "...Sfogliando nella cartella di ruby ho visto che è definito in Ruby\lib\ruby\gems\1.8\gems\actionpack-2.3.4\lib\action_controller\request.rb,allora prima di richiamarlo ho fatto le seguenti operazioni:

    require 'actionpack'
    ActionController::host_with_port


    e mi dà questo errore: "undefined method 'host_with_port' for ActionController::Module (NoMethodError).Ma come è possibile? è definito proprio in quella classe...Spero che riusciate ad aiutarmi perchè non ne vengo fuori.
    ps:utilizzo rails 2.3.4

  2. #2
    ho notato che il metodo host_with_port mi funziona tranquillamente in qualsiasi controller o view,ma se vado ad utilizzarlo in config/environment.rb settando il logout di un filtro rubycas così:


    CASClient::Frameworks::Rails::Filter.configure(
    :logout_url => "https://mioservercas/logout?service=http://#{host_with_port}/"
    }


    mi dice che il metodo host_with_port è indefinito...devo fare il require di qualcosa prima? ripeto che tale metodo non funziona solo in config/environment.rb.Spero di essere stato più chiaro.

  3. #3
    host_with_port è un metodo d'istanza della classe request quindi funziona solo dove hai un contesto di una richiesta http ed un oggetto request.
    Nell'environment non esiste alcuna request perché viene caricato prima di una qualsiasi richiesta di un client, dunque non lo puoi utilizzare.

  4. #4
    si ma è un bug allora...perchè se io volessi indirizzare il logout del rubycas in un host diverso da localhost come faccio? il rubycas client e il corrispettivo logout(ma anche il login e tutto il resto) sono configurati nell'environment così:

    CASClient::Frameworks::Rails::Filter.configure(
    :login_url ...
    ...
    :logout_url => "https://mioservercas/logout?service=http://localhost:3000/"
    ...
    }


    non posso fare un cookie in un controller e poi utilizzarlo in environment?così per esempio:

    applicazion_controller.rb:
    def index
    cookies[:logout] = {:value=> request.host_with_port}
    end


    e poi in environment.rb utilizzo il cookies così:

    $hostname=cookies[:logout]
    CASClient::Frameworks::Rails::Filter.configure(
    :login_url ...
    ...
    :logout_url => "https://mioservercas/logout?service=http://#{$hostname}/"
    ...
    }
    ma credo che neanche i cookies vadano bene nel file environment,almeno che non faccia qualche require...boh

  5. #5
    No, non è un bug, semplicemente quello che stai cercando di fare non ha senso.
    Se vuoi usarlo su un host differente da localhost allora dovrai passargli il valore staticamente o dinamicamente utilizzando delle configurazioni.

    Non puoi accedere in alcun modo ai dati di una request http in fase di caricamento dell'enviornment perché non esiste. Non solo, addiritura potrebbe non esistere mai ad esempio nel caso l'environment venga caricato per eseguire un task di rake o un'istanza di script/console.

    Nello specifico non conosco i requisiti della libreria RubyCAS quindi non so dirti il suo comportamento.

  6. #6
    lo so che dovrei passare delle configurazioni differenti per un altro host,anche se vorrei che lo rilevasse automaticamente l'host e la porta proprio il metodo con host_with_port,senza andare a cambiare la configurazione sempre...comunque sia nel caso specifico il logout come ho già detto è configurato nell'environment.rb


    http://github.com/gunark/rubycas-cli...environment.rb


    grazie lo stesso.

  7. #7
    Originariamente inviato da enriconrails
    lo so che dovrei passare delle configurazioni differenti per un altro host,anche se vorrei che lo rilevasse automaticamente l'host e la porta proprio il metodo con host_with_port,senza andare a cambiare la configurazione sempre...comunque sia nel caso specifico il logout come ho già detto è configurato nell'environment.rb

    http://github.com/gunark/rubycas-cli...environment.rb

    grazie lo stesso.
    Come detto, non lo puoi fare perchè sono due strati dell'applicazione differenti.
    Per chiartirti meglio le idee l'unica cosa che puoi fare è leggere la documentazione sul processo di bootstrap di Rails che è comunque un passo fondamentale se vuoi usare Rails in modo corretto.

    Come vedi, anche nell'esempio che mi hai indicato i dati vengono scritti hardcoded nel file.

  8. #8
    ok l'avevo capito che sono due strati differenti...ma rimane il fatto che quel "localhost" di logout nell'esempio non lo possa cambiare come voglio se non manualmente ogni volta.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.