1

新用户注册该网站后,他们应该被重定向到交易索引。这在开发环境中可以正常工作,但在生产环境中不起作用(在 Heroku 上)。在生产中,它重定向到用户索引(不存在)。

这是我的用户控制器:

class UsersController < ApplicationController

  def new
    @user = User.new
  end

  def create
    @user = User.new(params[:user])
    if valid_email? @user.email
      @user.save
      redirect_to deals_path
    else
      flash[:error] = "Please enter a valid email address"
      redirect_to root_path
    end
  end

  private
    def valid_email?(email)
      valid_email_regex = /\A.+@.+\..+\z/i
      email =~ valid_email_regex
   end
end

这是routes.rb:

root to: 'users#new'

resources :deals, only: [:index]
resources :users, only: [:new, :create]

这是 rake 路由和 RAILS_ENV=production rake 路由的结果(两者相同):

    root      /                    users#new
   deals GET  /deals(.:format)     deals#index
   users POST /users(.:format)     users#create
new_user GET  /users/new(.:format) users#new

在开发中一切正常,但在生产中它表现得好像用户控制器中的“redirect_to deal_path”行不存在。

该应用程序在开发中使用 SQLite,在生产中使用 PostgreSQL,这可能与它有关吗?

该应用程序位于 rails 3 并托管在 Heroku 上。

4

1 回答 1

0

原来问题是用户模型上的 before_save 过滤器用于发送无法正常工作的欢迎电子邮件。我删除了之前的过滤器,现在它工作正常。以下是任何感兴趣的人的服务器日志:

2013-04-08T03:14:07+00:00 app[web.1]: Started POST "/users" for xx.xxx.xx.xxx at 2013-04-08 03:14:07 +0000
2013-04-08T03:14:08+00:00 app[web.1]: Processing by UsersController#create as HTML
2013-04-08T03:14:08+00:00 app[web.1]:   Parameters: {"utf8"=>"✓", "authenticity_token"=>"b4ysVip3iTm8LZmeRxHX3EdX/pH7X6c6SpgF11IpQis=", "user"=>{"email"=>"user@example.com"}, "commit"=>"Sign up"}
2013-04-08T03:14:08+00:00 app[web.1]:   Rendered user_mailer/welcome_email.html.erb (10.9ms)
2013-04-08T03:14:08+00:00 app[web.1]: 
2013-04-08T03:14:08+00:00 app[web.1]: Sent mail to user@example.com (54ms)
2013-04-08T03:14:08+00:00 app[web.1]: Completed 500 Internal Server Error in 344ms
2013-04-08T03:14:08+00:00 app[web.1]: 
2013-04-08T03:14:08+00:00 app[web.1]: SocketError (getaddrinfo: Name or service not known):
2013-04-08T03:14:08+00:00 app[web.1]:   app/models/user.rb:24:in `welcome_email'
2013-04-08T03:14:08+00:00 app[web.1]:   app/models/user.rb:15:in `block in <class:User>'
2013-04-08T03:14:08+00:00 app[web.1]:   app/controllers/users_controller.rb:10:in `create'
2013-04-08T03:14:08+00:00 app[web.1]: 
2013-04-08T03:14:08+00:00 app[web.1]: 
2013-04-08T03:14:08+00:00 heroku[router]: at=info method=POST path=/users host=www.xxx.com fwd="xx.xxx.xx.xxx" dyno=web.1 connect=1ms service=555ms status=500 bytes=0
2013-04-08T03:14:06+00:00 heroku[web.1]: State changed from starting to up
于 2013-04-08T03:35:56.247 回答