我正在构建一个使用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数据库。
答案 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