【问题标题】:ActiveRecord::StatementInvalid in StoreController#indexStoreController#index 中的 ActiveRecord::StatementInvalid
【发布时间】:2011-08-09 02:16:08
【问题描述】:

所以我在第 239 页“使用 Rails 进行敏捷 Web 开发,第 4 版”。我的浏览器中有一个指向 localhost:3000 的选项卡,它工作正常。另一个选项卡指向“depot.thefonso.com”,我收到此错误:

"ActiveRecord::StatementInvalid in StoreController#index"

SQLite3::SQLException: no such table: products: SELECT "products".* FROM "products" ORDER BY title

Rails.root:/Users/gideon/Desktop/Rails_work/depot

...

app/controllers/store_controller.rb:7:in `index'

这里是 store_controller.rb 中的第 7 行....

  @products = Product.all

有哪位大师能指出我正确的方向吗?

这是我的database.yml

# SQLite version 3.x
#   gem install sqlite3
  development:
  adapter: sqlite3
  database: db/development.sqlite3
  pool: 5
  timeout: 5000

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
 test:
  adapter: sqlite3
  database: db/test.sqlite3
  pool: 5
  timeout: 5000

production:
  adapter: sqlite3
  database: db/production.sqlite3
  pool: 5
  timeout: 5000

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    您是否运行了cap deploy:migrations(按照第 237 页的说明)?

    根据您的症状,您的数据库没有定义 Product 表。我还要注意您没有从 sqlite3 更改为 mysql。

    请在您的两台机器上运行以下命令并比较生成的架构:

    sqlite3 db/development.sqlite3 .schema
    
    sqlite3 db/production.db .schema
    

    【讨论】:

    • 嗯,我有 pdf 版本,并且从本章开头 (235) 到第 240 页都没有列出“cap deploy:migrations”......没有提到它。好奇。
    • 如果您按 PDF 页码,那么请继续! :-) 下一步是设置您的数据库。
    • 我现在在第 142 页(pdf 版本)我在“使用 Capistrano 远程部署”。在我的 gemfile 中使用 'mysql2','0.2.7' 并在 database.yml 中将 mysql 更改为 mysql2 后,我能够运行命令 "rake db:setup RAILS_ENV="production"" 而没有错误。几乎......它确实告诉我“depot_production 已经存在”,但按照 pdf 文本第 241 页的指示进行。只是为了好玩,我运行了您为架构提到的两个命令。 “sqlite3 db/production.db .schema”什么也没产生……只是一个空白。虽然第一个命令产生了输出。
    • 啊哈!我看到命令“cap deploy migrations”(当然在 capistrano 部分)。好的,让我读完下一部分,也许这对我来说解释了一切……我希望如此。
    【解决方案2】:

    问题是 Rails 找不到表,所以如果它在本地工作,很可能只是配置问题。

    检查您的database.yml 配置以了解在depot.thefonso.com 上运行的应用程序。它很可能在 localhost 上查找数据库,但在您的远程服务器上找不到。

    【讨论】:

    • 嗯,这就是物理文件现在位于同一位置的原因。我在迭代 K1“部署”中,文本没有说明这个错误对于我所在的位置是否正常。该文本实际上暗示该应用程序应该可以正常工作。我将发布我的 database.yml 的内部结构:
    猜你喜欢
    • 1970-01-01
    • 2016-04-01
    • 2016-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-31
    • 2014-02-03
    相关资源
    最近更新 更多