【问题标题】:Ruby on rails app works locally but does not work on herokuRuby on rails 应用程序在本地工作,但在 heroku 上不起作用
【发布时间】:2012-07-17 02:33:28
【问题描述】:

我正在为 ruby​​ on rails 做 michael hartl 的教程,当应用程序部署时,一切都在本地运行良好,但在 heroku 上却不行。这个问题出现在本书的第 7 章之前:http://ruby.railstutorial.org/ruby-on-rails-tutorial-book#top

您是否需要任何详细信息来调试此问题?请告诉我.....

这里是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]:

【问题讨论】:

  • 您可以从输出 Heroku 上发生的事情以及应该发生的事情开始。
  • herokuapp 仅在所有页面上显示此错误“我们很抱歉,但出了点问题。”
  • 我如何从 cmd 在这里发布 heroku 日志?如果我只是复制它看起来会很乱。请指导我:)
  • 这取决于操作系统。如果在 osx 上:heroku logs | pbcopy,如果在 Linux 上:heroku logs | xclip
  • 我在上面添加了heroku日志:)

标签: ruby-on-rails ruby-on-rails-3 heroku


【解决方案1】:

所以我也在做 Hart 教程并且遇到了同样的问题。我运行了 heroku run db:migrate....我确保它是最新的 git push heroku....我在数据库中为我的一个用户添加了一个 remember_key。它在 schema.rb 文件中。

我终于找到了答案:

user.rb:

将 :remember_token 添加到 attr_accessible

例如:“attr_accessible :name, :email, :password, :password_confirmation, :remember_token”

由于某种原因,这在教程中被遗漏了,即使现在我知道出了什么问题,这也是有道理的。添加后,我重新推送到 heroku 和 Viola....

希望这会有所帮助:)

【讨论】:

  • 我刚刚意识到我的答案是 Teoulas 评论的复杂版本“或者你根本没有那个属性”——值得称赞的地方 :)
【解决方案2】:

仅当您要搜索的属性存在时,动态查找器才有效。要么您没有运行所有迁移,要么您根本没有该属性 (remember_token),或者您拼写错误。

【讨论】:

    【解决方案3】:

    我遇到了同样的问题,恕我直言,没有必要添加:remember_tokenattr_accessible 字段。这样做会暴露:remember_token,创建getter 和setter,这是不必要的,因为:remember_token 必须被视为内部变量。我解决了重启 Heroku 应用程序的问题,如下所示:

    heroku-nomethod-error-remember-token

    重新启动后,应用程序正常运行,就像在本地运行一样。

    【讨论】:

    • 这对我来说非常有用,谢谢! (我同意你不应该公开你的:remember_token。应该指出的是,这不是 Hartl 的错误/遗漏。)
    • 运行heroku restart
    【解决方案4】:

    失败是因为没有找到下面方法find_by_remember_token的定义。我记得 remember_token 是在 Hartl 教程中的 session_helper 中定义的。它似乎在调用 signed_in? 方法时出现。

    您能粘贴session_helper.rbUser 型号代码吗?

    【讨论】:

      【解决方案5】:

      尝试运行heroku restart。它对我有用。

      应该注意的是,不建议将:remembered_token 添加到您的attr_accessible 声明中,就像r4m's answer 一样。 (Hartl 在教程中没有这样做是有原因的。)

      【讨论】:

        【解决方案6】:

        行:

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

        告诉你 Rails 不知道 'find_by_remember_token' 是什么,这意味着它要么不存在(即这是一个错字),要么通常用于确定类属性的数据库不存在' t知道这个领域。

        假设这不是一个错字,那么迁移您的数据库将是一个选项:

        heroku run rake db:migrate
        

        【讨论】:

          【解决方案7】:

          当我尝试推送到 heroku 和亚马逊时,我遇到了内部服务器错误。在将应用程序推送到服务器之前,我必须预编译我的资产。如果这是您的问题,最简单的解决方案是运行

          RAILS_ENV=production rake assets:precompile 
          

          或添加 加载“部署/资产” 到 capfile,如果你使用 Capistrano。有人告诉我您可以将以下内容添加到您的 deploy.rb 文件中,但我无法使其正常工作。

          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
          

          【讨论】:

            【解决方案8】:

            对我有用的是完全按照教程中的描述在用户模型中定义 create_remember_token 方法。

            private
            def create_remember_token
               self.remember_token = SecureRandom.urlsafe_base64
            end
            

            然后在 before_save 方法中调用它。

            before_save { 
                self.email.downcase!
                create_remember_token
            }
            

            我之前没有将它作为方法声明。虽然它在我的计算机上运行,​​但在 Heroku 中却失败了。

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

            另外,跑步也无妨:

            heroku run rake db:migrate
            

            【讨论】:

              猜你喜欢
              • 2015-08-16
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-10-11
              • 2021-03-05
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多