0

我正在开发一个使用 Devise 身份验证系统的 Ruby on Rails 应用程序。 https://github.com/plataformatec/devise

我在互联网上搜索了与我自己类似的问题,但无济于事。我想给你一点背景知识,这一切都是从两个独立的应用程序开始的。其中之一是使用设计。我目前正在尝试将两个应用程序混合为一个。即使将模型视图和控制器放在他们需要的位置之后,我也没有遇到任何问题。但是,我们需要从 Sqlite3 数据库切换到 Postgresql 数据库。一旦我修改了 database.yml 文件以指向新的 Postgres 数据库并重新启动服务器,我就开始在整个应用程序中收到各种 to_sym 错误,并为使用 Devise 添加到应用程序的新功能出现路由错误。

在我切换到 Postgresql 数据库之前,我通过数据库转换器运行了我的 development.sqlite3 文件——这是我过去所做的,没有任何问题。

我不确定如何调试此应用程序,因为这些 to_sym 错误始终在发生。

举个例子,这里是停止工作的页面之一:

主页中的 NoMethodError #index

显示 C:/Users/chunter33/Desktop/devise_forem/app/views/layouts/application.html.haml 其中第 19 行提出:

nil:NilClass 的未定义方法“to_sym”

  • 16: %a{:href => "#"}= t("web-app-theme.profile", :default => "配置文件")
  • 17: %li
  • 18: %a{:href => "#"}= t("web-app-theme.settings", :default => "设置")
  • 19:-如果已登录?
  • 20: %li
  • 21: %
  • 22: = current_user.email
  • 应用程序跟踪:

    app/helpers/application_helper.rb:3:in `signed_in?'

    app/views/layouts/application.html.haml:19:in `_app_views_layouts_application_html_haml__944875441_29833656'

    注意:如果我切换回 SQLite,我将不再收到任何这些错误。

    我正在使用 Ruby 1.8.7 和 Rails 3.1

    我可以从哪里开始寻找任何想法?

    如果您需要任何其他信息,请告诉我。

    4

    2 回答 2

    0

    我发现了问题的根源。我使用 ESF 数据库迁移工具包将我的数据从 sqlite3 迁移到 Postgresql。问题在于它不能正确处理从 sqlite3 到 PostgreSQL 的转换,并且 rails 生成的 id 列的自动递增特性在 PostgreSQL 中不起作用,就像在 Sqlite3 中那样。为了解决这个问题,我只需要删除数据库中的所有表,将数据库版本重置为 0 并运行 rake db:migrate,而我的 database.yml 设置为从 PostgreSQL 数据库运行。

    于 2011-11-07T19:54:23.757 回答
    0

    我不知道 ruby​​,但我知道 PostgreSQL,这与数据库无关。

    您的两个相关错误是:

    1. 主页中的 NoMethodError #index
    2. nil:NilClass 的未定义方法“to_sym”

    你有一个 nil/null 对象,它试图调用“to_sym”。模板中的某些变量未定义。

    既然你已经改变了数据库,我怀疑要么:

    1. 与数据库的连接失败。
    2. 当您期待一些查询时,查询没有返回任何行。

    这很难说,但更多的错误检查和一些日志记录应该会有所帮助。

    于 2011-11-04T10:13:33.657 回答