Wdrożenie na właściwy serwer i błąd :(

Hej

Napisałem aplikację w Rails. Chciałem ją teraz wrzucić na serwer i pojawiło się rozczarowanie.

Wersja Railsów na serwerze to: 2.3.5, Mongrel -> 1.1.5.

U mnie pod Webrickiem oraz pod Mongrelem aplikacja działa. Natomiast na serwerze wywala prosty błąd:

undefined local variable or method `i' for #<ActionView::Base:0x7f0c1e413170>

zmienna i pojawia się w pliku części (partial). Wysyłam ją takim czymś:

<%= render :partial =>'costam', :collection =>@moje, :as => :i

Reszta aplikacji gdzie nie mam takiej konstrukcji działa.

Wydaje mi się że na serwerze mam wyższe railsy niż na localhost. Mam na lapku zainstalowane 2.3.5 i 2.3.4. Ale nie za bardzo umiem określić pod jaką faktycznie wersją działa mi aplikacja.
W pliku environments.rv mam: RAILS_GEM_VERSION = ‘2.3.5’ unless defined? RAILS_GEM_VERSION

Być może używam jakiejś przestarzałej konstrukcji

Pozdrawiam

Pokaż kod partiala i dokładny komunikat błędu(która linijka itd.)

Zobacz również ten rozdział w rails guides:
http://guides.rubyonrails.org/layouts_and_rendering.html#rendering-collections
IMO lepiej jest korzystać z przyjętej konwencji niż
nazywać indywidualnie zmienne lokalne.

Możesz jeszcze zapoznać się dokładnie z opisem metody render
http://apidock.com/rails/ActionController/Base/render

Mam taki błąd:

[code] Showing zadania/_yellowcard.erb where line #4 raised:

undefined local variable or method `i’ for #ActionView::Base:0x7fdab64abaa8

Extracted source (around line #4):

1:
2: <%
3: c = ‘wazny’
4: c = ‘przecietny’ if i.status.to_i == 0
5: %>
6:
7:

Trace of template inclusion: /zadania/index.html.erb[/code]
Główny widok:

<div id="karteczki"> <%= render :partial => "yellowcard", :collection => @yellowcards, :as => :i %> </div>
oraz partial _yellowcard:

[code]<%
c = ‘wazny’
c = ‘przecietny’ if i.status.to_i == 0
%>

[/code] U mnie na PC gdzie tworzona była aplikacja wszystko działa i na Webricku i na Mongrelu.

nie wiem czego to nie działa, ale ja bym w głowyn widoku po prostu:

<%= render :partial => @yellowcards%>

A później w widoku zamiast “i” używałbym “yellowcard”. I tak chyba wyjdzie mniej pisania, a za parę mięsięcy łatwiej się połapiesz co partial wyświetla.

Metoda Piotra działa.

Dzięki wielkie, ale dalej mnie to szokuje, że coś co działa mi na lapku nie chce zadziałać na serwerze właściwym.
Sporo mam kodu do pozamieniania, myślę że może mi to zająć cały dzień :confused:

Pozdrawiam :slight_smile:

Będąc w folderze z aplikacją wpisz ruby script/about
aby wyświetlić dokładne informacje nt. używanych wersji railsów i rubiego.

Zainteresuj się również:

rake rails:freeze:edge # Lock to latest Edge Rails, for a specific release use RELEASE=1.2.0 rake rails:freeze:gems # Lock this application to the current gems (by unpacking them into vendor/rails)
Będziesz pewny, że aplikacja na serwerze produkcyjnym działa na dokładnie takiej wersji railsów jakiej oczekujesz.

Dlatego ja bym nie “ukrywał” problemu tylko go rozwiązał.

Możesz podać jakie masz wersje rubiego na serwerze i u siebie na laptopie?

UPDATE:
I jeszcze gem list z serwera i laptoka.

praca@tomek-laptop:/media/sda2/Programowanie/Ruby/Rails$ ruby script/about About your application's environment Ruby version 1.8.7 (i486-linux) RubyGems version 1.3.5 Rails version 2.2.3 Active Record version 2.2.3 Action Pack version 2.2.3 Active Resource version 2.2.3 Action Mailer version 2.2.3 Active Support version 2.2.3 Edge Rails revision unknown Application root /media/sda2/Programowanie/Ruby/Rails Environment development Database adapter mysql Database schema version 20100114120345 praca@tomek-laptop:/media/sda2/Programowanie/Ruby/Rails$
Gemy z Lapka

[code]praca@tomek-laptop:~$ gem list

*** LOCAL GEMS ***
actionmailer (2.3.5, 2.3.4)
actionpack (2.3.5, 2.3.4)
activerecord (2.3.5, 2.3.4)
activeresource (2.3.5, 2.3.4)
activesupport (2.3.5, 2.3.4)
acts_as_list (0.1.2)
calendar_date_select (1.15)
cgi_multipart_eof_fix (2.5.0)
gem_plugin (0.2.3)
mocha (0.9.8)
rack (1.0.0)
rails (2.3.5, 2.3.4)
rake (0.8.7)[/code]
Gemy z serwera

actionmailer (2.3.5) actionpack (2.3.5) activerecord (2.3.5) activeresource (2.3.5) activesupport (2.3.5) acts_as_list (0.1.2) acts_as_tree (0.1.1) calendar_date_select (1.15) cgi_multipart_eof_fix (2.5.0) daemons (1.0.10) fastthread (1.0.7) gem_plugin (0.2.3) mongrel (1.1.5) rack (1.0.1) rails (2.3.5) rake (0.8.7)
Widzę teraz wyraźnie że moja aplikacja jest napisana w rails 2.2.3

Dziękuję za zainteresowanie tematem. Jednak może mi ktoś powiedzieć jak wymusić wyższą wersję rails.
Wpis w environment.rb: RAILS_GEM_VERSION = ‘2.3.5’ unless defined? RAILS_GEM_VERSION chyba nie pomoże :frowning:

Dzięki za pomoc :slight_smile:

chyba też już wiem skąd się wzięła ta wersja 2.2.3. Po prostu zainstalowałem sobie ją z oficjalnych repozytoriów Ubuntu, a nie za pomocą gem-a :confused:

Dlatego polecenie rails generowało mi projekt w starych railsach. Czy ktoś może mi powiedzieć jak zrobić tak aby projekt mój był w wyższych railsach.
Wiem że nie obędzie się bez przepisania części kodu. Myślałem o tym żeby stworzyć nowy projekt w Rails 2.3.5 i przekopiować odpowiednie plik z app, itd?

Ja miałem kiedyś problem podobny, miałem wtedy jak się później okazało projekt z zamrożoną w nim wersją railsów , jak odmroziłem to już było git

[quote=axlinux]Dlatego polecenie rails generowało mi projekt w starych railsach. Czy ktoś może mi powiedzieć jak zrobić tak aby projekt mój był w wyższych railsach.
Wiem że nie obędzie się bez przepisania części kodu. Myślałem o tym żeby stworzyć nowy projekt w Rails 2.3.5 i przekopiować odpowiednie plik z app, itd?[/quote]
Zrób nową gałąź w gicie i i po prostu na bierząco poprawiaj błędy, które będą się pojawiały. Najwięcej kłopotów możesz mieć z pluginami, jeśli masz je w vendor/plugins. W samym projekcie nie powinno być wielu problemów.

W takim razie jak najszybciej wywal railsy i rubygems z apt-geta, to może stwarzać jeszcze więcej problemów.

Również polecam wywalenie railsów z apt-geta, miałem podobny przypadek jak tpl. Rubygems i rake miałem chyba zainstalowane z repozytoriów i nie było z tym problemów, ale lepiej zrobić tak jak pisze drogus.