3

我正在构建一个使用 ActiveRecord 的非 Rails 纯 ruby​​ 应用程序。我想编写一个 rake 文件,为它创建一个数据库和表。我尝试以下代码

namespace :db do
  task :create do
    conn = ActiveRecord::Base.connection
    create_db = "CREATE DATABASE foo_dev"
    conn.execute(create_db)
  end
end

但这给了我

ActiveRecord::ConnectionNotEstablished: ActiveRecord::ConnectionNotEstablished

错误。嗯,这很明显,因为我没有将 ActiveRecord 连接到任何数据库。

我该怎么办?


编辑:我想创建一个 MySQL 数据库。

4

4 回答 4

5

建立连接,例如:

ActiveRecord::Base.establish_connection(
   :adapter   => 'sqlite3',
   :database  => './your_db.db'
)

对于 sqlite,如果数据库(文件)不存在,则会创建它。然后执行迁移以创建表。

基于上一个问题ActiveRecord 可以在迁移之外创建表吗?

于 2013-01-04T16:53:08.057 回答
1

感谢您的回答,但正如我在我的问题中编辑的那样,我忘了提到我想创建一个 MySQL 数据库。我未能通过 ActiveRecord 创建 MySQL 数据库。然后我在mysql2 gem 的帮助下解决了这个问题。这是我的解决方案:

client = Mysql2::Client.new(:host => 'localhost', :username=>"#{YOUR_MYSQL_USERNAME}", :password=> "#{YOUR_MYSQL_PASSWORD}")
client.query("CREATE DATABASE company_db")
client.query('USE company_db')
client.query('CREATE TABLE employees ...')
...

这里'USE company_db'查询很重要,因为它告诉gem我们想在这个数据库上运行查询。

于 2013-01-21T09:17:37.873 回答
0

您需要在没有数据库的情况下连接,然后创建它,然后连接数据库:

connection_options = { adapter: "mysql2", host: "127.0.0.1", username: "root" }
database = 'foo'
ActiveRecord::Base.establish_connection(connection_options)
begin
  ActiveRecord::Base.connection.create_database(database)
rescue ActiveRecord::StatementInvalid
  # already exists ...
end
ActiveRecord::Base.establish_connection(connection_options.merge(database: database))
于 2022-02-25T15:00:55.587 回答
-1

您可以使用create_database关闭连接的方法,如下所示:

ActiveRecord::Base.establish_connection(connetion_params)
ActiveRecord::Base.connection.create_database('database_name')
于 2019-08-24T18:33:57.330 回答