Javscript rails 3.2 sviluppo/produzione

nel controller ho questo:
def games_by_feed

if params[:id].present?
condizioni = “feed = ‘#{params[:id]}’”
@games = Entry.find(:all,:conditions => condizioni, :select =>
‘distinct gioco’, :order => “gioco”).map {|u| [u.gioco]}
else
@games = []
end
respond_to do |format|
format.html { render :layout => false }
#format.js { render :layout => false }
end
end
ho questa vista:games_by_feed.html.erb
<%= select(:select, :gioco, @games, { :include_blank => true }) %>

e questa vista input.html.erb

Feed: <%= select(:select, :feed, @feeds, { :include_blank => true }) %> Game:
....

in application.js
jQuery(function($) {
// when the #feed field changes
$("#select_feed").change(function() {
// make a POST call and replace the content
var game = $(‘select#select_feed :selected’).val();
if(game == “”) game=“0”;
jQuery.get(’/entries/games_by_feed/’ + game, function(data){
$("#subFeed").html(data);
})
return false;
});

})

tutto funziona bene in development (webrick)
la seconda combo si aggiorna dinamicamente.
in modalità produzione sia con webrick sia con nginx/passenger
la combobox rimane inattiva.

qualcuno può darmi una spiegazione?

Grazie

ho l’impressione che in modalità produzione non trovi il percorso
/entries/games_by_feed/’
in
jQuery.get(’/entries/games_by_feed/’ + game, function(data){
$("#subFeed").html(data);

in route.rb
resources :entries do
collection do
get :input_giorno
get :input_periodo_premium
get :input_periodo
post :list_giorno
post :list_periodo_premium
post :list_periodo
end
end

match ‘entries/games_by_feed/:id’, :controller=>‘entries’, :action =>
‘games_by_feed’

ciao,

sei assolutamente sicura che il codice di development e quello di
produzione
siano identici? :wink:

a occhio, non credo che il problema sia il fatto che non trova il
percorso, ad
ogni modo potresti:

  • leggere i log dell’application (development Vs production) per capire
    cosa
    accade tra i due ambienti
  • controllare le richieste ajax che partono dal browser (SE partono) e/o
    la
    console javascript del browser per identificare eventuali
    problemi/errori

ciao,
A.

grazie per la risposta.
nel log non riporta niente

comunque
settando
config.serve_static_assets = true
con webrick produzione funziona
con nginx/passenger
ancora no.

qualche idea di configurazione ngix ?

ciao

certo dopo anche aver fatto rake assets:clean e rake tmp:clear

guida già vista
guardo meglio

ciao

Nota a margine, non preferiresti rifattorizzare cosi’?

def games_by_feed
@games = Entry.games_by_feed(params[:id)

end

class Entry

def self.games_by_feed(feed)
return [] unless feed
Entry
.where(:feed => feed)
.select(:gioco)
.uniq
.order(“gioco”)
.map(&:gioco)
end
end

forse. ma il problema grosso è quello dell’oggetto.
grazie

Il 26/03/2012 19:47, Mariarosaria T. ha scritto:

grazie per la risposta.
nel log non riporta niente

cio, non riporta niente di strano, oppure non arriva nessuna richiesta?

settando
config.serve_static_assets = true
con webrick produzione funziona

pessima scelta, stai dicendo al server di compilare/comprimere i tuoi
assets
(js/css/etc…) per ogni richiesta. ma in produzione non ne hai bisogno,
del
resto si tratta di files statici :wink:

ti consiglio di reimpostarlo a false, e capire dove sta il problema.

con nginx/passenger
ancora no.

qualche idea di configurazione ngix ?

la prima cosa che mi viene in mente: hai precompilato gli assets?
indendo dire:
“rake assets:precompile”.

fossi in te, butterei un occhio anche su questa guida, ti torner utile:

ciao di nuovo,
A.

in console firebug console rilevo questo errore.

http://45.124.58.102/entries/games_by_feed/Bingo 404 Not Found x 77ms

Cache-Control private
Connection keep-alive
Content-Length 728
Content-Type text/html; charset=utf-8
Date Wed, 28 Mar 2012 16:27:11 GMT
Server nginx/1.0.14 + Phusion Passenger 3.0.11 (mod_rails/mod_rack)
Status 404
X-Powered-By Phusion Passenger (mod_rails/mod_rack) 3.0.11
X-Rack-Cache miss
X-Request-Id 6121f3f941cf2a344275de7f414950d4
X-Runtime 0.008121
Intestazioni di richiesta
Accept /
Accept-Encoding gzip, deflate
Accept-Language it-it,it;q=0.8,en-us;q=0.5,en;q=0.3
Connection keep-alive
Cookie _bp_session=BAh7C0kiD3Nlc3Npb25faWQGOgZFRkkiJWZkODM3YTE

alcune possibilit:

  1. le routes sono errate
  2. le routes sono giuste, ma hai impostato il controller per rispondere
    con uno
    status 404 quando non trova la risorsa (nel tuo caso, presumo che ti
    arrivi un
    parametro di nome “Bingo”)

ora che sai cosa avviene sul client, controlla anche i logs del server
in
produzione, cos verifichi quale delle due ipotesi giusta:

  • da un terminale o ssh: tail -f log/production.log
  • ripeti le tue operazioni sul browser
  • controlla i log

(batti ctrl+c per uscire)

ciao,
A.

Il 28/03/2012 18:38, Mariarosaria T. ha scritto:

Il 28/03/2012 19:18, Mariarosaria T. ha scritto:

e come mai con webrick -e production funziona ???

presumo che “rails server -e production” lo usi in locale, nginx su una
macchina remota. o no? in tal caso, forse, ci sono
dati/codice/configurazioni
differenti. per esempio: c’ “Bingo” sul database di produzione?

altra ipotesi che hai configurato in modo erroneo il webserver. tutte
le altre
pagine/actions dell’applicazione ti funzionano e vengono servite
correttamente?

ad ogni modo, webserver a parte, un 404 significa che non stata trovata
la
risorsa richiesta. ora, se lo hai ottenuto a causa delle routes, o di
qualche
codice nei controller, “questo lo ignoro” :wink:

nei log non c’ niente
non so come hai configurato il server, di default li trovi l

  1. le routes sono errate
  2. le routes sono giuste, ma hai impostato il controller per rispondere
    con uno
    status 404 quando non trova la risorsa (nel tuo caso, presumo che ti
    arrivi un
    parametro di nome “Bingo”)

e come mai con webrick -e production funziona ???
nei log non c’è niente

“rails server -e production”
su medesimo server remoto

def gamesfeed
exit # QUI NON CI ARRIVA MAI
if params[:id].present?

condizioni = “feed = ‘#{params[:id]}’”

condizioni = “”
@games = Entry.find(:all,:conditions => condizioni, :select =>
‘distinct gioco’, :order => “gioco”).map {|u| [u.gioco]}
else
@games = []
end

risolto:
url applicazione
http://www.blabla.it/betp/
nginx.conf
#gzip on;
server {
listen 80;
server_name www.blabla.it;
root /webapp/main/public;
passenger_enabled on;
#rails_spawn_method smart;
passenger_base_uri /betp;

in webrick
jQuery.get(‘/entries/games_by_feed/’ + game, function(data){
per nginx
deve essere
jQuery.get(‘/betp/entries/games_by_feed/’ + game, function(data){

in firebug /betp** lo guardavo e non lo vedevo …