我希望rake db:schema:load使用的db/schema.rb不是位于我的应用程序中,而是位于我的一个gem中。通过将config.paths['db/seeds'] = Core::Engine.paths['db/seeds'].existent放入我的application.rb中,这已经对db:seed有效。(核心是一个宝石,也是一个Rails引擎)。
但是,config.paths中没有db/schema.rb路径,config.paths['db'] = Core::Engine.paths['db'].existent不起作用。
做这件事最简单的方法是什么?
发布于 2013-03-29 21:46:01
根据Rails3.2源代码https://github.com/rails/rails/blob/3-2-stable/activerecord/lib/active_record/railties/databases.rake#L400,设置SCHEMA env变量应该会有所帮助:
ENV['SCHEMA'] = Core::Engine.paths['db'].existent据我所知,在Rails 4中,数据库任务已经发生了很大的变化,因此这种方法在Rails 4中不一定有效。
另一种选择是覆盖gem中的rake任务本身。
发布于 2015-08-28 04:10:17
对于任何偶然发现这一点的人来说,从Rails4.0开始,你可以在你的引擎配置中设置'db‘键,主应用程序将在那里查找你的模式。
active_record/railties/databases.rake
module MyEngine
class Engine < ::Rails::Engine
initializer :override_db_dir do |app|
app.config.paths["db"] = config.paths['db'].expanded
end
end
end发布于 2013-03-19 19:45:13
您可以从gem - rake gem_name:install:migrations获取迁移
https://stackoverflow.com/questions/15498128
复制相似问题