rake db:schema:load
会将schema.rb
文件加载到rails数据库中。有没有办法通过rake将structure.sql
文件加载到数据库中,还是只需要手动执行此操作?
答案 0 :(得分:75)
使用rake db:structure:load
,即会加载db/structure.sql
。
[更新]
如果要加载其他文件,可以通过
指定其路径SCHEMA
环境变量(Rails 5.0或更高版本)DB_STRUCTURE
环境变量(Rails 4.x)例如,运行
rake db:structure:load SCHEMA=db/another.sql
或
rake db:structure:load DB_STRUCTURE=db/another.sql
答案 1 :(得分:27)
只需使用
rake db:setup
将使用schema.rb
或structure.sql
,具体取决于您的配置。
答案 2 :(得分:6)
使用数据库自己的SQL加载机制。
对于Postgres,这应该有效(至少如果数据库存在且您不需要密码):
psql -d databaseName < db/structure.sql
在Heroku上,rake db:setup不能正常工作,因为你可以创建一个数据库,你可以这样做:
heroku pg:psql < db/structure.sql
答案 3 :(得分:2)
加载架构后,您可以尝试:
rails dbconsole < structure.sql
OR
rails db < structure.sql
答案 4 :(得分:2)
有时您希望加载的文件不是默认的db/structure.sql
。
对于rails 4.2及更早版本,请使用
DB_STRUCTURE=some_file.sql rake db:structure:load
从轨道5开始使用
SCHEMA=some_file.sql rake db:structure:load
答案 5 :(得分:1)
制作您的seeds.rb文件,如:
unless Rails.env.production?
connection = ActiveRecord::Base.connection
sql = File.read('db/structure.sql')
statements = sql.split(/;$/)
statements.pop # the last empty statement
ActiveRecord::Base.transaction do
statements.each do |statement|
connection.execute(statement)
end
end
end