[英]Use schema.rb in gem
我想rake db:schema:load
使用db/schema.rb
,它不在我的應用程序中,而是在我的一個寶石中。 通過在我的application.rb
放置config.paths['db/seeds'] = Core::Engine.paths['db/seeds'].existent
這已經適用於db:seed
。 (Core是一個寶石,也是一個Rails引擎)。
但是, config.paths
和config.paths['db'] = Core::Engine.paths['db'].existent
沒有db/schema.rb
路徑config.paths['db'] = Core::Engine.paths['db'].existent
無效。
完成這項工作的最簡單方法是什么?
對於任何偶然發現這一點的人,從Rails 4.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
根據Rails 3.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任務本身。
您可以從gem-rake gem_name:install:migrations進行遷移
你為什么不使用自定義rake任務?
desc 'Load a custom.rb file into the database'
task :load_default_schema do
file = ENV['SCHEMA'] || "path_to_your_file"
if File.exists?(file)
load(file)
else
abort %{#{file} doesn't exist yet.}
end
end
雖然不完全相同,但您可以執行以下操作,以便在gem中進行遷移,就像它們是應用程序的一部分一樣。 我發現這是一個更優雅的解決方案,而不是嘗試共享架構。 我希望這有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.