Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    request.remote_ip con chiamate AJAX

    Salve a tutti. Ho un problema con "request.remote_ip", ho un array fatto così:

    1 ip = request.remote_ip
    2 $address[ip]= {:test => "ok"}
    ...
    ...
    ...
    11 ip = request.remote_ip # (insieme ad altre chiamate AJAX)
    12 response= $address[ip][:test]

    Molto spesso funziona, ma alcune volte mi dà questo errore:

    NoMethodError (undefined method `[]' for nil:NilClass)
    app/controllers/my_controller.rb:12...

    che si riferisce all'array. Tutto ciò succede solo quando ho delle chiamate(molte chiamate in realtà) AJAX contemporanee. Ma è possibile che request.remote_ip mi restituisca un ip nullo durante le chiamate AJAX ? Aiutatemi vi prego!!!

  2. #2
    Non credo che sia quello il problema, ad ogni modo fai sparire il dollaro davanti al nome della variabile. In ruby il dollaro identifica uno speciale tipo di variabile e non va usato.

  3. #3
    il dollaro indica che la visibilità della variabile è globale no? devo utilizzarlo per forza perchè quell'array lo uso in diversi metodi e in diverse classi.Comunque tu pensi che request remote non possa ritornare un valore vuoto?allora non so,perchè ripeto quell'errore me lo da solo quando il programma è utilizzato da molti utenti e quando ci sono molte richieste ajax simultanee,poi come dici tu non so se dipende da quello.Grazie.

  4. #4
    Originariamente inviato da enricoajax
    il dollaro indica che la visibilità della variabile è globale no? devo utilizzarlo per forza perchè quell'array lo uso in diversi metodi e in diverse classi.
    Allora il problema è un altro. Hai dei pesanti errori di design dell'architettura MVC.
    Evita di usare le variabili globali, finché sei in tempo.

    Comunque tu pensi che request remote non possa ritornare un valore vuoto?
    No, ma il fatto che tu sposti i contesti potrebbe causare un problema.

    Soprattutto, il contesto request non è sempre valorizzato.

    Come dicevo prima, ci sono probabilmente alla base degli errori di design dell'architettura.
    Posso suggerirti come riscriverei la funzionalità se mi fai capire meglio che intendi fare, ma onestamente senza codice davanti è impossibile eseguire il debugging di quello che hai scritto ora.

  5. #5
    Eh lo so ma il codice è lungo...le varibili globali le utilizzo per memorizzare delle sessioni che purtroppo vengono cancellate ogni volta che c'è un logout CAS.Non so se hai mai utilizzato RubyCAS,comunque il mio programma utilizza queste sessioni e prima di fare il logout le memorizzo in quest'array globale,poi faccio il logout cas e poi ripristino i valori delle sessioni tramite quell'array.Nel fare tutto ciò passo da un metodo all'altro all'interno di classi diverse,potrei utilizzare dei cookies ma ce ne vorrebbe uno per ogni sessione,mentre con questo array riesco a memorizzare tutto come ho fatto nell'esempio iniziale:

    ip= request.remote_ip
    $ripristino[ip]={rova1=> session[rova1],rova2=> session[rova2],rova3=> session[rova3]}

    ...
    logout cas#(che mi elimina tutte le sessioni e non so perchè.Sono in un'altra classe #comunque)
    ...


    ip= request.remote_ip #(sono nuovamente in un'altra classe)
    session[rova1]=$ripristino[ip][rova1] #però qui poi mi dà quell'errore che dicevo prima
    session[rova2]=$ripristino[ip][rova2]
    session[rova3]=$ripristino[ip][rova3]

    Utilizzo l'ip in modo che ogni utente abbia un elemento di quell'array tutto suo in cui memorizzare le proprie sessioni,se non facessi così la variabile "$ripristino" verrebbe sovrascritta a ogni accesso creandomi dei problemi.Come dicevo se volessi utilizzare dei cookies dovrei utilizzarne uno per ogni sessione,se faccio l'hash infatti il cookie si trasforma in array.

  6. #6
    Un'altra cosa,ho provato questo programma in modalità "development" con un db sqlite3,su un server,con altri 3 pc connessi ad esso e funziona correttamente,sempre.Quell'errrore me lo dà quando avvio sul server lo stesso programma in modalità "production" con un db mysql e con più di 4 pc connessi...non so se è una casualità e che tutto dipenda da ciò...ma non credo visto che l'errore è sulle variabili globali.

  7. #7
    Un'altra cosa,ho provato questo programma in modalità "development" con un db sqlite3,su un server,con altri 3 pc connessi ad esso e funziona correttamente,sempre.Quell'errrore me lo dà quando avvio sul server lo stesso programma in modalità "production" con un db mysql e con più di 4 pc connessi...non so se è una casualità e che tutto dipenda da ciò...ma non credo visto che l'errore è sulle variabili globali.


    ps:nella risposta di prima ero io,con un nick utilizzato tempo su questo pc

  8. #8
    Le variabili globali sono globali all'intero processo e non sono threadsafe.
    Quindi ogni request di un utente qualsiasi sovrascrive le variabili impostate dall'utente precedente.

    Questo è solo uno dei 1000 motivi per cui ti dicevo prima che ci sono dei grandi errori di architettura.

  9. #9
    ho sbagliato il termine volevo dire "array" e non variabile...l'array è globale ma grazie al request.remote_ip ogni pc avrà un suo elemento dove scrivere i propri dati,come ti ho fatto vedere nell'ultimo esempio:

    ip= request.remote_ip
    $array = {:lodefinisco => "definisci"} unless $array
    $array[ip]="a"

    esempio:
    si connette l'utente 192.168.1.1 l'array sarà così formato:"192.168.1.1a lodefinisco definisci"
    poi si connette l'utente 192.168.1.2
    e poi l'utente 192.168.1.3 infine l'array sarà: "192.168.1.3a192.168.1.1a lodefinisco definisci192.168.1.2a"

    l'ordine degli elementi in cui viene visualizzato il contenuto dell'array non è fisso,comunque non viene sovrascritto l'array generale,ad ogni accesso viene aggiunto un elemento che ha come nome il proprio ip e come valore "a",in questo caso.

  10. #10
    Originariamente inviato da enricoajax

    ps:nella risposta di prima ero io,con un nick utilizzato tempo su questo pc
    disabilitato: vediamo di non far pasticci con gli account, per cortesia

    @tutti: scusate l'interruzione, continuate pure

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 © 2019 vBulletin Solutions, Inc. All rights reserved.