gpt4 book ai didi

ruby-on-rails - 通过引擎引入的 Rails 迁移路径

转载 作者:行者123 更新时间:2023-12-02 20:37:44 29 4
gpt4 key购买 nike

我有一个 Rails 应用程序,它通过在 Gemfile 中显式声明来运行 Rails 引擎。我设置了一个脚本,通过以下方式从引擎安装迁移:rake Railties:install:migrations,然后进行迁移。当我运行脚本时,会安装迁移,但是当迁移运行时,我收到 DuplicateMigration 错误。我进一步调查了这一点,发现

Rails.application.paths['db/migrate'].to_a

结果是:

["/src/db/migrate","/bundle/bundler/gems/my_engine-w8ejw9jf/db/migrate"]

不知何故,捆绑目录的迁移路径被添加到 Rails 应用程序路径中。这种情况发生在哪里?有没有办法防止我的包目录中的迁移路径包含在应用程序路径中?

最佳答案

好吧,我做了一些更多的挖掘,结果发现这实际上是在引擎本身中完成的。在 engine.rb 文件中,有一些逻辑会更改自动加载的路径。核心逻辑如下:

 class Engine < ::Rails::Engine
isolate_namespace MyEngine

initializer :append_migrations do |app|
unless app.root.to_s.match root.to_s
config.paths["db/migrate"].expanded.each do |expanded_path|
app.config.paths["db/migrate"] << expanded_path
end
end
end
end

这是获取迁移文件的扩展路径,并将它们插入路径配置中。这就是为什么我在路径配置中看到 /bundle/bundler/gems/mycoolgem-w8ejw9jf/db/migrate

关于ruby-on-rails - 通过引擎引入的 Rails 迁移路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46699181/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com