我已经向heroku部署了一个应用程序(来自udemy.com的“ROR开发者课程”下的财务跟踪器)。登录按钮工作正常,但当我点击注册按钮时,它给了我这个错误
We're sorry, but something went wrong.
If you are the application owner check the logs for more information.
我已经运行了heroku run rake db:迁移成功。 我使用devise gem进行身份验证。 请任何想法的人?? ....谢谢
修改
来自日志:
2016-10-26T17:46:19.965045+00:00 heroku[router]: at=info method=GET path="/users/sign_up" host=johnuzoma-finance-tracker.herokuapp.com request_id=9b928dfe-66be-47b5-933b-3d5b6cf3a899 fwd="197.210.25.210" dyno=web.1 connect=0ms service=19ms status=500 bytes=1754
2016-10-26T17:46:19.950321+00:00 app[web.1]: Started GET "/users/sign_up" for 197.210.25.210 at 2016-10-26 17:46:19 +0000
2016-10-26T17:46:19.955368+00:00 app[web.1]: Processing by User::RegistrationsController#new as HTML
2016-10-26T17:46:19.957892+00:00 app[web.1]: Completed 500 Internal Server Error in 2ms (ActiveRecord: 0.0ms)
2016-10-26T17:46:19.958887+00:00 app[web.1]:
2016-10-26T17:46:19.958889+00:00 app[web.1]: NoMethodError (undefined method `for' for #<Devise::ParameterSanitizer:0x007f782dff6408>):
2016-10-26T17:46:19.958890+00:00 app[web.1]: app/controllers/user/registrations_controller.rb:7:in `configure_permitted_parameters'
2016-10-26T17:46:19.958891+00:00 app[web.1]:
2016-10-26T17:46:19.958892+00:00 app[web.1]:
2016-10-26T17:46:20.651597+00:00 heroku[router]: at=info method=GET path="/favicon.ico" host=johnuzoma-finance-tracker.herokuapp.com request_id=8d875ac1-de78-47 68-9cd0-a653afd2318b fwd="197.210.25.210" dyno=web.1 connect=0ms service=6ms status=304 bytes=133
RegistrationsController代码
class User::RegistrationsController < Devise::RegistrationsController
before_filter :configure_permitted_parameters
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up).push(:first_name, :last_name)
devise_parameter_sanitizer.for(:account_update).push(:first_name, :last_name)
end
end
答案 0 :(得分:1)
所以你应该做的第一件事是去你的应用程序的Heroku管理面板,并查看日志文件。你应该找到一个堆栈跟踪(应该看起来像一个错误,然后是一堆方法调用和行号)。另一种选择是远程访问应用服务器,在您的计算机上运行Heroku app目录并运行(假设您已安装Heroku CLI)
heroku run bash
然后导航到您的日志目录并运行
tail -f <replace_with_log_file_name>
(日志文件应该是production.log或develop.log),这将显示日志活动的实时流,所以只需重新创建错误,看看会发生什么。
替换这些行
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up).push(:first_name, :last_name)
devise_parameter_sanitizer.for(:account_update).push(:first_name, :last_name)
end
使用这些行
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:first_name, :last_name])
devise_parameter_sanitizer.permit(:account_update, keys: [:first_name, :last_name])
end
您正在使用的gem devise
在版本中更改了其API,因此您使用的语法不再有效。我假设在某个时间点你做了一个捆绑更新或者无意中升级了你的宝石
答案 1 :(得分:0)
如果您在通过Heroku日志确定错误时面临很多困难,您可以尝试的另一件事是您可以在浏览器本身上看到错误并在production.rb
文件中执行此操作(您可以在配置中找到) / environments目录)更改:
config.action_controller.consider_all_requests_local = false
要:
config.action_controller.consider_all_requests_local = true
现在再次在Heroku上部署你的应用程序,你就可以了。