forked from projectfedena/fedena
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ActualizacionRails3.txt
406 lines (292 loc) · 16.9 KB
/
ActualizacionRails3.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
1. Obtener el código fuente
C:\Sites>git clone https://github.com/scman1/fedena.git
Cloning into 'fedena'...
remote: Counting objects: 21434, done.
remote: Total 21434 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (21434/21434), 12.01 MiB | 691 KiB/s, done.
Resolving deltas: 100% (11896/11896), done.
2. Cambiarse al directorio de fedena
C:\Sites>cd fedena
3. Verificar el estado del proyecto en rama actual
C:\Sites\fedena>git status
# On branch master
nothing to commit (working directory clean)
4. Crear una nueva rama para la actualización a Rails 3.2.14
C:\Sites\fedena>git checkout -b updateR3
Switched to a new branch 'updateR3'
5. Verificar las ramas existentes
C:\Sites\fedena>git branch
master
* updateR3
6. Verificar totas las ramas, incluso las remotas
C:\Sites\fedena>git branch -a
master
* updateR3
remotes/origin/HEAD -> origin/master
remotes/origin/master
7. Verificar el estado del proyecto en la nueva rama
C:\Sites\fedena>git status
# On branch updateR3
nothing to commit (working directory clean)
8. Crear la nueva aplicación Rails 3 con
$ rails new .
Permitimos que se sobreescriba todo, el respaldo del código que funciona en Rails 2 esta en el programa de control de código fuente (git).
9. Restaurar los archivos básicos de la aplicación que fueron sobreescritos
C:\Sites\fedena>git checkout app/views/layouts/application.html.erb
C:\Sites\fedena>git checkout app/helpers/application_helper.rb
C:\Sites\fedena>git checkout app/controllers/application_controller.rb
C:\Sites\fedena>git checkout db/seeds.rb
C:\Sites\fedena>git checkout config/locales/en.yml
10. Ahora empezamos restaurando las rutas de la aplicación, la sintaxis ha cambiado y no es soportada en rails 3.2.14
C:\Sites\fedena>git checkout config/routes.rb
11. Verificamos si es necesario configurar la zona horaria, fedena esta configurado para usar UTC, que es el valor por omisión en rails 3, por lo que no se necesitan cambios.
12. El almacenamiento del identificador de la sesión es la siguiente parte a verificar. En este caso fedena también usa el estilo de rails 3, tampoco se necesita hacer nada.
13. Ahora debemos agergar las gemas que usa fedena al archivo Gemfile.
gem 'delayed_job_active_record'
14. Problemas con delayed_job. initializer, cambiamos job por worker
15. Agregamos gem 'wicked_pdf' al archivo gemfile
16. Migramos la DB. En este caso tenemos un error, para arrreglarlo removemos rspec.rake
Migro manualmente en un directorio temporal
Problemas:
1. 20111105052819_add_fields_to_privilege.rb
Fallo por mass assignment de los campos :name y :description.
Para arreglarlo agregamos lo siguiente a la clase
attr_accessible :name, :description, :school_id
Pienso que se requiere mover inicializaciones al archivo de semillas
2. 20120606050404_remove_grading_type_from_batches.rb.
No puede correr en sqlite.
Solución eliminamos este campo no deseado desde la creación y tambien esta migración
eliminar:
20120421062750_add_grading_type_to_batches.rb
20120606050404_remove_grading_type_from_batches.rb.
3 20120704103545_add_cce_indices.rb el indice :fa_groups_subjects se crea dos veces, una en el hash y otra individualmente
Este problema solo pasaen SQLite porque no acepta duplicar los nombres de indices en diferentes tablas.
Solución:
agregamos "1" al nombre del indice y continuamos. debemos movernos a mysql tan pronto como sea posible
4 20130110095412_add_index_to_student_data.rb este indice:
#add_index :student_additional_details, [:student_id,:additional_field_id], :name => "student_data_index"
ya existe, marcado como comentario
Este problema solo pasaen SQLite porque no acepta duplicar los nombres de indices en diferentes tablas.
Solución:
agregamos "1" al nombre del indice y continuamos. debemos movernos a mysql tan pronto como sea posible
Hasta aqui todas las migraciones pasan... Pendiente cambiar a MySQL y tratar de nuevo
17. Inicializar la base de datos.
ejecutamos: rake db:seed
Problema 1. attr_accessible para tablas, igual que el problema descrito anteriormente
Para arreglarlo agregamos lo siguiente a la clase attr_accessible y la lista de campos que se quieren asignar
Problema 2. cambio de scope a scope
ActionController::RoutingError (undefined method `scope' for User
Este es un problema ocasionado por que 'scope' se cambio a 'scope' para rails 3+
Todos los usos de scope se deben editar para evitar este problema
Problema 3. Modelos en subdirectorios (namespaces)
https://groups.google.com/forum/#!topic/rubyonrails-talk/c-N8Nq4IAyg
Al terminar la base de datos se migra con éxito y contiene las configuraciones iniciales
18. Tratamos de correr las pruebas
Primer problema en course model (course.rb)
1. La gema has_and_belongs_to_many_with_deferred_save no esta actualizada para Rails 3
Solución:
Eliminamos de course.rb
has_and_belongs_to_many_with_deferred_save :cce_weightages
Y agregamos a course.rb
has_and_belongs_to_many :cce_weightages
2. Error porque falta la gema in_place_editing, para el controlador de exam_scores.
Solución agregamos a gemfile:
gem 'in_place_editing'
3. Error porque falta la gema 'xss_terminate', para el modelo news
Solución agregamos a gemfile:
gem 'xss_terminate', '~> 0.22'
4. Error en por llamada a translate para internacionalización en el modelo student
Solución editar student.rb:
cambiar t() por I18n.t
5. La gema has_and_belongs_to_many_with_deferred_save no esta actualizada para Rails 3
Solución:
Eliminamos de subject.rb
has_and_belongs_to_many_with_deferred_save :fa_groups
Y agregamos a subject.rb
has_and_belongs_to_many :fa_groups
6. La gema 'will_paginate' falta y es referenciada en el ayudante remote_link_renderer.rb.
Además el ayudante personaliza la salida de will_paginate y por ello debe derivarse de WillPaginate::ActionView::LinkRenderer
Solución agregamos a gemfile:
gem 'will_paginate', '~> 3.0'
y editar remote_link_renderer.rb para que sea sublcalse de:
WillPaginate::ActionView::LinkRenderer
7. Problema con la clase de la que se deriva BatchFeeCollectionDiscount, le falta el espacio de nombres
Solución editar batch_fee_collection_discount.rb para agregar el espacio de nombres
class Finance::BatchFeeCollectionDiscount < Finance::FeeCollectionDiscount
y de paso:
agregar namespaces para todas las clases de finance
agregar I18n a todas las solicitudes de traducción
cambiar named_scope por scope
8. Errores de internacionalización en clases de fedena
Solución:
agregar I18n a todas las solicitudes de traducción
9. Problemas con clase configuration.rb
Esta usando RAILS_ROOT para buscar la raiz de la aplicacion.
Solución
Cambiar por Rails.root, de paso cambiarlo en todos los archivos que usen RAILS_ROOT
10. Problemas en casos de pruebas por el uso de la gema shoulda
Solución:
agregar shoulda a gemfile como sigue:
group :test do
gem 'rspec-rails'
gem 'shoulda'
gem 'shoulda-context'
end
y modificar los usos de los matchers de shoulda en los casos de pruebas
por ejemplo
should_have_many se cambia a have_many
no hay un matcher para should_have_named_scope... asi que estos casos se comentan
11. Problemas por diferencias en las fixtures para pruebas
Muchas de las fixtures estan desfasadas con las clases usadas en fedena
esto ocasiona problemas al cargar el contexto de pruebas. Algunas tablas o
campos han sido eliminados.
Solución:
Editar las fixtures incorrectas y eliminar las no usadas
12. Problema con pruebas que usan la gema 'factory_girl
'factory_girl' se usa para crear pruebas sin usar fixtures.
Solución:
Configurar factory_girl (agregar a gemfile y verificar el inicializador)
1. Agregar a gemfile
gem "factory_girl_rails", "~> 4.0"
2. Actualizar el conjunto de gemas usadas ejecutando:
bundle install
3. Configurar el conjunto de casos de pruebas incluyendo factory_girl
class Test::Unit::TestCase
# Agregamos esta línea a las pruebas que usan factory_girl
include FactoryGirl::Syntax::Methods
end
4. Editar el archivo factories.rb para agregar
FactoryGirl.define do
define do...
end
y reemplazar Factory.define por define
13. Problema con el uso de errors[:attribute]
Reemplazar:
assert @user.errors.invalid?(:username)
Con:
assert @user.errors[:username].any?
14. Problema por la descontinuación de assert_valid y assert_invalid
Reemplazar
assert_valid @subject
con
assert @subject.valid?
Y reemplazar
assert_invalid @subject
con
assert !@subject.valid?
19. Cuando las pruebas corren se encuentran errores en las clases.
Estos se corrigen como en el ciclo normal de desarrollo basado en pruebas.
1. problemas de mass assignment por atributos no declarados como accesibles
Agregar attr_accessible en las clases que lo reguieran
2. errores por falta de espacios de nombres en las clases de HR
Agregamos el prefijo HR:: a las declaraciones de clase en el archivo factories.rb
3. errores por rutas no resueltas.
Agregamos las rutas necesarias para disminuir el número de errores en las pruebas funcionales
4. error por mass assignment para la clase ExamGroups
Agregamos attr_accessible para name y exam_date
5. error en prueba: "with admin logged in should redirect to index if exam group is destroyed"
Solucón:
1. se cambia el metodo "show" por el metodo "destroy"
2. se agrega la ruta "batches" y se anida la ruta "exam_groups" en ella.
6. error en prueba: "with admin logged in should render edit template if wrong parameters are given in edit form"
Solución:
1. se cabia el metodo "post" por el metod put
2. se agrega la ruta courses
7. error en la prueba: "with admin logged in should render edit" por el uso f.error_messages en edit.html.erb de exam groups
Solución: Editar
Cambiar
<%= f.error_messages %>
Por:
<% @exam_group.errors.full_messages.each do |msg| %>
<p><%= msg %></p>
<% end %>
8. Error en la prueba: "with admin logged in should render index" por nombre de ruta no encontrada en index.html.erb
Solución: Editar
Cambiar
<%= link_to "#{t('exam_management')}", :controller => "exam", :action => "create_exam" %> »
Por:
<%= link_to "#{t('exam_management')}", :controller => "exam", :action => "new" %> »
9. Error de la prueba de unidad "new general subject should be disabled" por el uso de clases con espacio de nombres
en las relaciones de "subject"
Solución:
Cambiar las declaraciones de las dos relacione siguientes:
has_many :employees_subjects
has_many :employees, :through => :employees_subjects
agregando el nombre de la clase como sigue:
has_many :employees_subjects, class_name: HR::EmployeesSubject
has_many :employees, class_name: HR::Employee, :through => :employees_subjects
10. Error en la prueba funcional "with admin logged in should render new." por el método 'error_messages_for', que es obsoleto,
en new.html.erb. El problema es que 'error_messages_for' se utilizaba para desplegar mensajes de error fuera de la forma donde
se generó y en este caso se usa para listar errores para el símbolo ':exam_group' no de la variable de instacia '@exam_group'.
Por ahora vamos a usar la variable de instancia y después probaremos si esto es correcto.
11. Error en la prueba funcional "with admin logged in should render new." por el uso de 'form_remote_for', que es obsoleto,
en new.html.erb
Solución cambiar:
<% form_remote_for :exam_option, :url => {:controller=>'exam',:action => 'update_exam_form',:batch=>@batch} do |form| %>
Por:
<%= form_for :exam_option, :remote => true, :url => {:controller=>'exam',:action => 'update_exam_form',:batch=>@batch} do |form| %>
12. Error en la prueba funcional "with admin logged in should redirect to show if correct parameters are give in edit form".
Este error se debe a que el controlador exam_groups_controller no verifica la validez de los parametros [:exam_group] y [:exam_group][:exams_attributes]
Solución:
En el método create del exam_groups_controller cambiamos la linea
unless @type=="Grades"
Por
unless @type=="Grades" || params[:exam_group].nil? || [:exam_group][:exams_attributes].nil?
20. Error por uso de palabra reservada Configuration como nombre de una clase de fedena
Configuration es una palabra reservada de Rails (ActiveSupport::Configurable::Configuration:Class)
Aqui debemos hacer un cambio mayor ya que configuration se usa varias veces en la aplicación.
Cambiaremos la tabla de la base de datos, la clase, el controlador, las vistas, semillas, pruebas y todas las llamadas a ella.
La clase sera renombrada como custom_settings
Empezamos cambiando la migración de configuraciones y las referencias a configuraciones en el archivo de semillas
21. Rutas... muchos problemas por la vieja sintaxis de las rutas, arreglarlas todas... long hours
con esto quedamos igual que en el http://es.asciicasts.com/episodes/225-actualizacion-a-rails-3, la aplicacion "corre",
las migraciones y la inicialización de la base de datos también funcionan.
Empezamos con la ruta de raíz y de ahí vamos activando cada ruta como se requiere. Pero esto generaba problemas a casi cada paso
por ello seguimos con una reescritura completa de las rutas.
Fuentes consultadas:
http://railscasts.com/episodes/7-all-about-layouts?view=asciicast
http://blog.55minutes.com/2012/04/untangling-the-rails-asset-pipeline-part-4-troubleshooting/
http://guides.rubyonrails.org/layouts_and_rendering.html#structuring-layouts
http://railsguides.net/rails-nested-layouts/
http://gregmoreno.wordpress.com/2010/08/12/rails-3-upgrade-part-2-routes/
http://stackoverflow.com/questions/6537118/map-connect-syntax-for-rails-3
http://stackoverflow.com/questions/4091024/help-migrating-routes-to-rails-3-format
22. Problema con:
#filter_parameter_logging :password
en application_controller, comentado pues al parecer no es requerido
23. Problema al cargar las librerias de fedena, modificar el application.rb para que las cargue al iniciar agregando:
config.autoload_paths += %W(#{config.root}/lib)
24. Problemas con internacionalización.
Fedena Usa Translator para internacionalización, el problema es que esta gema funciona solo para rails 2.
aparentemente no hay actualizaciones para rails 3+
Solución usar i18n que provee rails.
Para esto debemos crear un scope e incluir las rutas que deben ser traducidas en dicho scope.
1. todos los archivos de locales dan problemas al cargarse porque tiene la forma:
order: [ :year, :month, :day ]
Para que puedan ser leidos correctamente se deben cambiar a
order:
- :day
- :month
- :year
2. en los lugares donde se usa solo "t" se debe cambiar a "I18n.t"
3. Al arrancar la aplicacion se tiene un mensaje de error por que la gema de i18n (i18n (~> 0.6, >= 0.6.4))
tiene un bug.
*************************************************************************************
* [deprecated] I18n.enforce_available_locales will default to true in the future. *
* If you really want to skip validation of your locale you can set I18n.enforce_av *
* ailable_locales = false to avoid this message. *
*************************************************************************************
Por el momento se puede dejar así y esperar a la actualización de la gema (cuando movamos a rails mayor que 3.2.14)
Adicionales
A1. Agregar paperclip a gemfile
A2. Arreglar las rutas a la raíz
A3. La aplicación carga y muestra la pantalla de login
A4. Al cambiar la incialización se actualiza el lenguaje automaticámente, i18n funciona 20
25. Problemas en la primera ejecución (visibles desde el navegador)
2. Error en clase configuration
undefined method `find_all_by_config_key' for ActiveSupport::Configurable::Configuration:Class
app/controllers/user_controller.rb:232:in `login'
Este error viene de como se inicializa la clase 'Configuration'
26. Verificar rutas y terminar de agregar plugins a Gemfile
27. Arreglar estilos
28. Arreglar Javascript