' freak.no - Ruby on rails - Kode funker ikke på production server
freak.no

freak.no (https://freak.no/forum/index.php)
-   Programmering (https://freak.no/forum/forumdisplay.php?f=49)
-   -   Ruby on rails - Kode funker ikke på production server (https://freak.no/forum/showthread.php?t=219651)

etse 28. april 2012 02:37

Ruby on rails - Kode funker ikke på production server
 
Jeg har en kode som fungerer helt fint på den lokale maskinen min og som kjører helt fint på serveren gjennom test-serveren (som man kjører mest kommandoen "rails s")

Når jeg derimot velger å teste websiden på serveren min funker den for det meste, bortsett fra en liten men alvorlig bug, hvor den gir meg følgende feilmelding.

Sitat:

ActiveModel::MissingAttributeError (missing attribute: UID):
app/controllers/application_controller.rb:114:in `block in getMembersForTask'
app/controllers/application_controller.rb:113:in `each'
app/controllers/application_controller.rb:113:in `getMembersForTask'
app/controllers/tasks_controller.rb:190:in `show'
Dette kommer fra følgende kode:
Kode:

def getMembersForTask(taskId)
    usersTask = TaskUsers.where(:TID => @task.id)

    usersList = []
    usersTask.each do |u|
      tmpUser = Users.find_by_id(u.UID)
      @member = Member.new(tmpUser.id, tmpUser.name, tmpUser.lastname, @privilegeMap[u.privilege - 1])
      usersList.push(@member)
    end
end

Her er TaskUsers en modell (les: table i databasen) med følgende schema:
Kode:

  create_table "task_users", :force => true do |t|
    t.integer  "TID"
    t.integer  "UID"
    t.integer  "privilege"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

Model-filen:
Kode:

class TaskUsers < ActiveRecord::Base
        attr_accessible(:TID, :UID, :privilege, :created_at, :updated_at)
       
        validates        :TID, :presence => true
        validates        :UID, :presence => true
       
        before_save :default_values
 
  def default_values
    self.privilege = 4 unless self.privilege
  end
       
end

Noen her som har noen gode forslag på hvorfor dette kun skjer på en production-server med apache og physion-passenger, men ikke på den innebyggede development serveren?
Det som gjør det enda merkeliggere er at feilen forsvinner om jeg restarter serveren - men kommer tilbake om lager en ny "Task" på siden (noe som fører til at det kommer en ny rad i TaskUsers-tabellen).

flexd 28. april 2012 14:49

Users.UID finnes ikke i tabellen. Har du kjørt rake db:create og rake db:migrate med RACK_ENV satt til production?

etse 28. april 2012 15:12

hei takker for svar.
Kan være det var det som var problemet, jeg løste problemet i går uten å helt vite hva jeg gjorde -e men en av tingene var å kjøre kommendoen "bundle exec rake assets:precompile"

Men det som er merkelig er at mange ting fungerte jo. Altså ting som avhenget av databasen. Den fikk skrevet ting til databaen, og hentet informasjon ut. Og fikk laget mange beskjeder på siden, som jeg også kunne lese. Men det var kun dette ene feltet i tabellen som ikke fungerte.


Alle tidspunkt er GMT +2. Klokken er nå 09:24.