如何在非rails应用程序中使用ActiveRecord创建新的MySQL数据库?

时间:2013-01-04 16:45:58

标签: ruby-on-rails ruby database activerecord

我正在构建一个使用ActiveRecord的非rails纯红宝石应用程序。我想写一个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数据库。

3 个答案:

答案 0 :(得分:5)

建立连接,例如:

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

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

基于上一个问题Can ActiveRecord create tables outside of a migration?

答案 1 :(得分:2)

感谢您的回答,但正如我在我的问题中编辑的那样,我忘了提到我想创建一个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我们要在这个数据库上运行查询。

答案 2 :(得分:0)

您可以在连接之外使用<memory>方法,如下所示:

create_database