Skip to main content
 首页 » 编程设计

ruby-on-rails之Rails 中的 Mysql2 和 Sqlite3

2025年05月04日22bluestorm

我有一个 Rails 应用程序,它使用两种不同类型的数据库:sqlite3 和 mysql2。

我做了一些搜索并设法做到了这一点,我的 database.yml 文件如下所示:

development: 
  adapter: sqlite3 
  database: db/development.sqlite3 
  pool: 5 
  timeout: 5000 
 
 
mysql2_development: 
  adapter: mysql2 
  database: db_name 
  username: user_name 
  password: pass_word 
  host: somehost.net 
  port: 3306 
  socket: /tmp/mysql.sock 

我在模型中创建了以下类来访问我的 Mysql2 数据库:
class NewDB < ActiveRecord::Base 
 
  # To change this template use File | Settings | File Templates. 
  self.abstract_class = true 
  establish_connection "mysql2_#{Rails.env}" 
end 
 
class PROJECT < NewDB 
end 

这里 PROJECT 是“NewDB”数据库中存在的表。

问题:

这是正确的方法吗,我如何从 Controller 访问它们?

在我的 Controller 中,我尝试了这个:
class NewDBController < ApplicationController 
 
  def index 
    @projects=PROJECT.all 
  end 
end 

但我收到以下错误“Mysql2::Error: Table 'newdb.projects' doesn't exist: SHOW FULL FIELDS FROM projects

请您参考如下方法:

您是否为其他环境运行了迁移?

rake db:migrate RAILS_ENV=mysql2_development 

你的项目类也应该被称为 Project反而。
您可以使用:
class Project < NewDB 
  set_table_name "PROJECT" 
end