2012-04-21 109 views
0

首先发布在SO上。我对Ruby on Rails比较陌生,我一直在阅读Michael Hartl的书“Ruby on Rails教程 - 通过示例学习”。但是,在运行我的应用程序时,我会遇到以下问题,我会亲切地解决问题。Ruby on Rails - Heroku问题&用户登录

1)当尝试运行我在“生产”模式的应用程序,如下我已经更新了文件“配置/ environments.rb”:

# force Rails into production mode when 
    # you don't control web/app server and can't set it the proper way 
    ENV['RAILS_ENV'] ||= 'production' 

然而,当我运行应用程序,我可以仍然可以看到目前从文件“应用程序/视图/布局/ application.html.erb”

<!-- Debug applies only to 'development' environment --> 
      <%= debug(params) if Rails.env.development? -%> 
    <!-- as determined by "if Rails.env.development?" --> 

这使我相信,我仍然以开发模式运行应用程序的调试工具。

2)对于那些已经询问过有关signin_path问题的人,我仍然无法看到一个解决方案来解决它。我可以注册用户,然后自动将他们重定向到他们的个人资料空间。这个是最欢迎的

def current_user # GET current_user 
     @current_user ||= user_from_remember_token 
    end 

    def signed_in? 
     !self.current_user.nil? 
    end 
    . 
    . 
    . 
    private 

     def user_from_remember_token 
      User.authenticate_with_salt(*remember_token) 
     end 

     def remember_token 
      cookies.signed[:remember_token] || [nil, nil] 
     end 

任何帮助:然而,导航菜单不发生相应的变化:

<nav class="round"> 
    <ul> 
     <li><%= link_to "Home", root_path -%></li> 
     <li><%= link_to "Support", support_path -%></li> 
     <% if signed_in? %> 
     <li><%= link_to "Users", users_path -%></li> 
     <li><%= link_to "Profile", current_user -%></li> 
     <li><%= link_to "Settings", edit_user_path(current_user) -%></li> 
     <li><%= link_to "Sign out", signout_path, :method => :delete -%></li> 
     <% else %> 
     <li><%= link_to "Sign in", signin_path -%></li> 
     <% end %> 

这里是从“应用程序/佣工/ sessions_helper.rb”文件中的代码。我目前正在尝试托管我的应用程序Heroku,但没有得到我不幸需要的支持。

干杯。

回答

0

如果问题与heroku服务器有关,请检查link。如果你想在本地运行,rails s -p3001 -e production可能会工作

+0

这有助于缩小问题的范围,以一个500错误,就像我住的应用程序,从而使文件的“公共/ 500.html”被激活(当我从本地运行127.0.0.1:3001而不是端口3000)。 – carmat 2012-04-22 03:31:07

0

看起来像你的signed_in?帮手不会返回你想要的。那么首先调试一下signed_in?像这样回复:

<%= signed_in? %> 

或者你可以用signed_in引发错误?作为消息。

此外它似乎忘记了current_user setter方法,应在创建会话后调用它。你需要有三个方法类似这样:

def current_user 
    @current_user ||= User.find_by_id(session[:user_id]) 
    end 

    def user_signed_in? 
    !!current_user 
    end 

    def current_user=(user) 
    @current_user = user 
    session[:user_id] = if @current_user ? current_user.id : nil 
    end 

,我建议你提出这个方法的ApplicationController为受保护的方法。

而最后一个忠告:

!self.current_user.nil? 

看起来非常糟糕。尽量避免使用砰!这应该为你工作:

self.current_user 
+0

嗨,我试过调试提示,它返回一个空白字符串。我的代码:'

signed_in?返回:“<%= signed_in? - %>”

'生成'

signed_in?返回:“”

' – carmat 2012-04-22 03:47:55