2012-07-18 34 views
7

Wykonuję tutoriala michael hartl dla ruby ​​na szynach i wszystko działa dobrze lokalnie, ale nie na heroku, gdy aplikacja uruchamia ... ten problem pojawia się przed rozdziałem 7 tej książki : http://ruby.railstutorial.org/ruby-on-rails-tutorial-book#topAplikacja Ruby on rails działa lokalnie, ale nie działa na heroku

Czy są jakieś szczegóły potrzebne do debugowania tego problemu? proszę dać mi znać .....

oto logi Heroku:

$ 2012-07-18T06:10:26+00:00 app[web.1]:  6:   <ul class="nav pull-right"> 

2012-07-18T06:10:26+00:00 app[web.1]: ActionView::Template::Error (undefined met 
hod `find_by_remember_token' for #<Class:0x00000004960740>): 
2012-07-18T06:10:26+00:00 app[web.1]:  7:   <li><%= link_to "Home", r 
oot_path %></li> 
2012-07-18T06:10:26+00:00 app[web.1]:  8:   <li><%= link_to "Help", h 
elp_path %></li> 
2012-07-18T06:10:26+00:00 app[web.1]:  9:   <% if signed_in? %> 
2012-07-18T06:10:26+00:00 app[web.1]:  10:    <li><%= link_to "Users 
", users_path %></li> 
2012-07-18T06:10:26+00:00 app[web.1]:  11:    <li id="fat-menu" clas 
s="dropdown"> 
2012-07-18T06:10:26+00:00 app[web.1]:  12:    <a href="#" class="d 
ropdown-toggle" data-toggle="dropdown"> 
2012-07-18T06:10:26+00:00 app[web.1]: app/helpers/sessions_helper.rb:10:in `cu 
rrent_user' 
2012-07-18T06:10:26+00:00 app[web.1]: app/helpers/sessions_helper.rb:23:in `si 
gned_in?' 
2012-07-18T06:10:26+00:00 app[web.1]: app/views/layouts/application.html.erb:1 
1:in `_app_views_layouts_application_html_erb___2533055855927805914_43132200' 
2012-07-18T06:10:26+00:00 app[web.1]: app/views/layouts/_header.html.erb:9:in 
`_app_views_layouts__header_html_erb__2547305690965663969_41244280' 
2012-07-18T06:10:26+00:00 app[web.1]: 
2012-07-18T06:10:26+00:00 app[web.1]: 
2012-07-18T06:10:26+00:00 heroku[router]: GET whizcollab.herokuapp.com/ dyno=web 
.1 queue=0 wait=0ms service=345ms status=500 bytes=643 
2012-07-18T06:10:34+00:00 app[web.1]: 
2012-07-18T06:10:34+00:00 app[web.1]: Started GET "/" for 115.87.214.246 at 2012 
-07-18 06:10:34 +0000 
2012-07-18T06:10:34+00:00 app[web.1]: 
2012-07-18T06:10:34+00:00 app[web.1]: Processing by StaticPagesController#home a 
s HTML 
2012-07-18T06:10:34+00:00 app[web.1]: Rendered static_pages/home.html.erb with 
in layouts/application (0.6ms) 
2012-07-18T06:10:34+00:00 app[web.1]: Rendered layouts/_shim.html.erb (0.0ms) 
2012-07-18T06:10:34+00:00 app[web.1]: Rendered layouts/_header.html.erb (1.2ms 
) 
2012-07-18T06:10:34+00:00 app[web.1]: Completed 500 Internal Server Error in 4ms 

2012-07-18T06:10:34+00:00 app[web.1]: ActionView::Template::Error (undefined met 
hod `find_by_remember_token' for #<Class:0x00000004960740>): 
2012-07-18T06:10:34+00:00 app[web.1]: 
2012-07-18T06:10:34+00:00 app[web.1]:  8:   <li><%= link_to "Help", h 
elp_path %></li> 
2012-07-18T06:10:34+00:00 app[web.1]:  9:   <% if signed_in? %> 
2012-07-18T06:10:34+00:00 app[web.1]:  6:   <ul class="nav pull-right"> 

2012-07-18T06:10:34+00:00 app[web.1]:  10:    <li><%= link_to "Users 
", users_path %></li> 
2012-07-18T06:10:34+00:00 app[web.1]:  7:   <li><%= link_to "Home", r 
oot_path %></li> 
2012-07-18T06:10:34+00:00 app[web.1]:  11:    <li id="fat-menu" clas 
s="dropdown"> 
2012-07-18T06:10:34+00:00 app[web.1]:  12:    <a href="#" class="d 
ropdown-toggle" data-toggle="dropdown"> 
2012-07-18T06:10:34+00:00 app[web.1]: app/helpers/sessions_helper.rb:10:in `cu 
rrent_user' 
2012-07-18T06:10:34+00:00 app[web.1]: app/views/layouts/_header.html.erb:9:in 
`_app_views_layouts__header_html_erb__2547305690965663969_41244280' 
2012-07-18T06:10:34+00:00 app[web.1]: app/helpers/sessions_helper.rb:23:in `si 
gned_in?' 
2012-07-18T06:10:34+00:00 app[web.1]: app/views/layouts/application.html.erb:1 
1:in `_app_views_layouts_application_html_erb___2533055855927805914_43132200' 
2012-07-18T06:10:34+00:00 app[web.1]: 
2012-07-18T06:10:34+00:00 app[web.1]: 
2012-07-18T06:10:34+00:00 heroku[router]: GET whizcollab.herokuapp.com/ dyno=web 
.1 queue=0 wait=0ms service=22ms status=500 bytes=643 
2012-07-18T06:12:03+00:00 app[web.1]: 
2012-07-18T06:12:03+00:00 app[web.1]: 
2012-07-18T06:12:03+00:00 app[web.1]: Started GET "/" for 115.87.214.246 at 2012 
-07-18 06:12:03 +0000 
2012-07-18T06:12:03+00:00 app[web.1]: Processing by StaticPagesController#home a 
s HTML 
2012-07-18T06:12:03+00:00 app[web.1]: Rendered static_pages/home.html.erb with 
in layouts/application (0.7ms) 
2012-07-18T06:12:03+00:00 app[web.1]: Rendered layouts/_shim.html.erb (0.0ms) 
2012-07-18T06:12:03+00:00 app[web.1]: Completed 500 Internal Server Error in 6ms 

2012-07-18T06:12:03+00:00 app[web.1]: Rendered layouts/_header.html.erb (2.3ms 
) 
2012-07-18T06:12:03+00:00 app[web.1]: ActionView::Template::Error (undefined met 
hod `find_by_remember_token' for #<Class:0x00000004960740>): 
2012-07-18T06:12:03+00:00 app[web.1]: 
2012-07-18T06:12:03+00:00 app[web.1]:  6:   <ul class="nav pull-right"> 

2012-07-18T06:12:03+00:00 app[web.1]:  7:   <li><%= link_to "Home", r 
oot_path %></li> 
2012-07-18T06:12:03+00:00 app[web.1]:  8:   <li><%= link_to "Help", h 
elp_path %></li> 
2012-07-18T06:12:03+00:00 app[web.1]:  9:   <% if signed_in? %> 
2012-07-18T06:12:03+00:00 app[web.1]:  11:    <li id="fat-menu" clas 
s="dropdown"> 
2012-07-18T06:12:03+00:00 app[web.1]:  10:    <li><%= link_to "Users 
", users_path %></li> 
2012-07-18T06:12:03+00:00 app[web.1]:  12:    <a href="#" class="d 
ropdown-toggle" data-toggle="dropdown"> 
2012-07-18T06:12:03+00:00 app[web.1]: app/helpers/sessions_helper.rb:10:in `cu 
rrent_user' 
2012-07-18T06:12:03+00:00 app[web.1]: app/helpers/sessions_helper.rb:23:in `si 
gned_in?' 
2012-07-18T06:12:03+00:00 app[web.1]: app/views/layouts/_header.html.erb:9:in 
`_app_views_layouts__header_html_erb__2547305690965663969_41244280' 
2012-07-18T06:12:03+00:00 app[web.1]: app/views/layouts/application.html.erb:1 
1:in `_app_views_layouts_application_html_erb___2533055855927805914_43132200' 
2012-07-18T06:12:03+00:00 app[web.1]: 
2012-07-18T06:12:03+00:00 app[web.1]: 
2012-07-18T06:12:03+00:00 heroku[router]: GET whizcollab.herokuapp.com/ dyno=web 
.1 queue=0 wait=0ms service=17ms status=500 bytes=643 
2012-07-18T06:13:31+00:00 app[web.1]: 
2012-07-18T06:13:31+00:00 app[web.1]: 
2012-07-18T06:13:31+00:00 app[web.1]: Started GET "/" for 115.87.214.246 at 2012 
-07-18 06:13:31 +0000 
2012-07-18T06:13:31+00:00 app[web.1]: Processing by StaticPagesController#home a 
s HTML 
2012-07-18T06:13:31+00:00 app[web.1]: Rendered static_pages/home.html.erb with 
in layouts/application (0.4ms) 
2012-07-18T06:13:31+00:00 app[web.1]: Rendered layouts/_shim.html.erb (0.0ms) 
2012-07-18T06:13:31+00:00 app[web.1]: Rendered layouts/_header.html.erb (1.9ms 
) 
2012-07-18T06:13:31+00:00 app[web.1]: Completed 500 Internal Server Error in 4ms 

2012-07-18T06:13:31+00:00 app[web.1]: 
2012-07-18T06:13:31+00:00 app[web.1]: ActionView::Template::Error (undefined met 
hod `find_by_remember_token' for #<Class:0x00000004960740>): 
2012-07-18T06:13:31+00:00 app[web.1]:  6:   <ul class="nav pull-right"> 

2012-07-18T06:13:31+00:00 app[web.1]:  7:   <li><%= link_to "Home", r 
oot_path %></li> 
2012-07-18T06:13:31+00:00 app[web.1]:  9:   <% if signed_in? %> 
2012-07-18T06:13:31+00:00 app[web.1]:  11:    <li id="fat-menu" clas 
s="dropdown"> 
2012-07-18T06:13:31+00:00 app[web.1]:  10:    <li><%= link_to "Users 
", users_path %></li> 
2012-07-18T06:13:31+00:00 app[web.1]:  8:   <li><%= link_to "Help", h 
elp_path %></li> 
2012-07-18T06:13:31+00:00 app[web.1]:  12:    <a href="#" class="d 
ropdown-toggle" data-toggle="dropdown"> 
2012-07-18T06:13:31+00:00 app[web.1]: app/helpers/sessions_helper.rb:10:in `cu 
rrent_user' 
2012-07-18T06:13:31+00:00 app[web.1]: app/helpers/sessions_helper.rb:23:in `si 
gned_in?' 
2012-07-18T06:13:31+00:00 app[web.1]: app/views/layouts/application.html.erb:1 
1:in `_app_views_layouts_application_html_erb___2533055855927805914_43132200' 
2012-07-18T06:13:31+00:00 app[web.1]: 
2012-07-18T06:13:31+00:00 app[web.1]: app/views/layouts/_header.html.erb:9:in 
`_app_views_layouts__header_html_erb__2547305690965663969_41244280' 
2012-07-18T06:13:31+00:00 app[web.1]: 
2012-07-18T06:13:31+00:00 heroku[router]: GET whizcollab.herokuapp.com/ dyno=web 
.1 queue=0 wait=0ms service=22ms status=500 bytes=643 
2012-07-18T06:13:37+00:00 app[web.1]: 
2012-07-18T06:13:37+00:00 app[web.1]: 
2012-07-18T06:13:37+00:00 app[web.1]: Started GET "/users" for 115.87.214.246 at 
2012-07-18 06:13:37 +0000 
2012-07-18T06:13:37+00:00 heroku[router]: GET whizcollab.herokuapp.com/users dyn 
o=web.1 queue=0 wait=0ms service=47ms status=500 bytes=643 
2012-07-18T06:13:37+00:00 app[web.1]: Processing by UsersController#index as HTM 
L 
2012-07-18T06:13:37+00:00 app[web.1]: Completed 500 Internal Server Error in 1ms 

2012-07-18T06:13:37+00:00 app[web.1]: 
2012-07-18T06:13:37+00:00 app[web.1]: app/helpers/sessions_helper.rb:10:in `cu 
rrent_user' 
2012-07-18T06:13:37+00:00 app[web.1]: NoMethodError (undefined method `find_by_r 
emember_token' for #<Class:0x00000004960740>): 
2012-07-18T06:13:37+00:00 app[web.1]: app/helpers/sessions_helper.rb:23:in `si 
gned_in?' 
2012-07-18T06:13:37+00:00 app[web.1]: app/controllers/users_controller.rb:48:i 
n `signed_in_user' 
2012-07-18T06:13:37+00:00 app[web.1]: 
2012-07-18T06:13:37+00:00 app[web.1]: 
+1

Możesz zacząć od wypisania tego, co dzieje się na Heroku, i co powinno się stać. –

+0

herokuapp pokazuje tylko ten błąd na wszystkich stronach "Przepraszamy, ale coś poszło nie tak." – ShivvyBee

+0

Uruchom "dzienniki heroku". –

Odpowiedz

9

Więc robiłem także Poradnik Hart i przychodziłem do kwestii SAME. Uruchomiłem db.exe: migrate .... upewniłem się, że jest na bieżąco z git push heroku .... Dodałem remember_key do mojego jednego użytkownika w bazie danych. To było w pliku schema.rb.

końcu znalazłem odpowiedź:

user.rb:

add: remember_token do attr_accessible

Ex: "attr_accessible: imię i nazwisko, e-mail:,: hasło: password_confirmation,: remember_token"

Z jakiegoś powodu jest to pominięte w samouczku, mimo że teraz wiem, co jest nie tak, to ma sens. Po dodaniu tego ponownie nacisnąłem na Heroku i Viola ....

Nadzieja to pomaga :)

+3

Właśnie zdałem sobie sprawę, że moja odpowiedź jest skomplikowaną wersją komentarza Teoulasa "lub po prostu nie masz tego atrybutu" - kredyt, w którym zasługuje na kredyt :) –

1

To nie dlatego, że nie znajdzie definicję następującą metodą find_by_remember_token. Pamiętam, że remember_token jest zdefiniowany w session_helper w samouczku Hartla. Wydaje się, że powstaje, gdy wywoływana jest metoda signed_in?.

Czy można wkleić kod modelu session_helper.rb i User?

3

Szukanie dynamiczne działa tylko wtedy, gdy szukany atrybut istnieje. Albo nie uruchomiłeś wszystkich migracji, albo po prostu nie masz tego atrybutu (remember_token) lub źle je wpisałeś.

0

Linia:

ActionView::Template::Error (undefined method `find_by_remember_token' for #<Class:0x00000004960740>): 

mówi, że Rails nie wie co find_by_remember_token "jest, co oznacza, że ​​albo nie istnieje (to znaczy, że to literówka), albo że w bazie danych, który jest zwykle używany do określania właściwości klasy, nie jest świadomy tego pola.

Zakładając, że nie jest to literówka, a następnie migracji bazy danych byłaby opcja:

heroku run rake db:migrate 
0

byłem coraz wewnętrzny błąd serwera, gdy próbowałem wcisnąć do Heroku a także Amazon. Przed przesłaniem aplikacji na serwer musiałem wstępnie skompilować moje zasoby. Jeśli jest to twój problem najprostszym rozwiązaniem było uruchomić

RAILS_ENV=production rake assets:precompile 

lub dodać obciążenie „wdrożyć/aktywa” do capfile, jeśli używasz Capistrano. Powiedziano mi, że możesz dodać następujące elementy do pliku deploy.rb, ale nie udało mi się go uruchomić.

after "deploy:restart", "deploy:precompile" 

    namespace :deploy do 

    desc "Compile assets" 
    task :precompile, :roles => :app do 
    run "cd #{release_path} && rake RAILS_ENV=#{rails_env} assets:precompile" 
    end 
end 
0

Co pracował dla mnie było określenie create_remember_token metody w modelu użytkownika dokładnie opisany w tutorialu.

private 
def create_remember_token 
    self.remember_token = SecureRandom.urlsafe_base64 
end 

A następnie wywołanie go w metodzie before_save.

before_save { 
    self.email.downcase! 
    create_remember_token 
} 

Nie miałem tego jako deklaracji metody wcześniej. I chociaż działało na moim komputerze, nie powiodło się w Heroku.

#this failed in Heroku  
before_save { 
    self.email.downcase! 
    self.remember_token = SecureRandom.urlsafe_base64 
} 

Również to nie zaszkodzi, aby uruchomić:

heroku run rake db:migrate 
3

miałem ten sam problem i mam powiedzieć, że IMHO to nie jest konieczne, aby dodać :remember_token pola attr_accessible. Czyniąc to, wystawiasz :remember_token, tworząc pliki pobierające i ustawiające, co nie jest konieczne, ponieważ :remember_token musi być traktowane jako zmienna wewnętrzna. I rozwiązać problem ponownego uruchamiania aplikacji Heroku, co zostało potwierdzone tutaj:

heroku-nomethod-error-remember-token

Po ponownym uruchomieniu aplikacja działa prawidłowo, jak to robił na miejscu.

+2

To działało znakomicie dla ja, dziękuję! (I zgadzam się, że nie powinieneś ujawniać swojego ': remember_token' .Trzeba zauważyć, że to nie jest błąd/zaniechanie na stronie Hartl.) – wikichen

+1

po prostu uruchom' restart Heroku' – Marina

1

Spróbuj uruchomić heroku restart. Zrobiło to dla mnie.

Należy zauważyć, że dodanie :remembered_token do deklaracji attr_accessible nie jest zalecane, zgodnie z r4m's answer. (Jest powód, dla którego Hartl nie zrobił tego w tutorialu.)