基于this article,它描述了如何使用Sprockets编写小型SQL清单文件,我有我的SQL视图和函数在每个rake db:migrate
自动重新创建。直到最后一次升级到Rails 5.1时,它才奏效。链轮不需要SQL文件的自定义耙任务
突然清单文件被编译,但是每个*= require
语句都被忽略,最后我得到一个空的清单文件。我已经尝试了DirectiveProcessor
的几种评论样式,有和没有文件扩展名,有和没有相对路径。无论我提供什么,我最终都会得到一个通过数据库执行的空文件。
我的设置
DB /功能/ application.sql
/*
* This is a manifest file that'll be compiled into application.sql, which will include all the files
* from db/functions listed below.
*
*= require kill_all_connections.sql
*= require invalidate_emails.sql
*
*= require days_until_birthday.sql
*/
的lib /任务/ db_functions.rake
namespace :db do
desc 'creates DB functions listed in db/functions.sql'
task :functions => :environment do
sprocket_env = Sprockets::Environment.new do |env|
env.register_mime_type('text/sql', '.sql')
env.register_processor('text/sql', Sprockets::DirectiveProcessor)
env.append_path 'db/functions'
end
ActiveRecord::Base.connection.execute(sprocket_env['application.sql'].to_s)
end
end
我的结果
看着该控制台当我执行rails db:functions
,我看到了以下内容:
(69.2ms) /*
* This is a manifest file that'll be compiled into application.sql, which will include all the files
* from db/functions listed below.
*
*
*/
所以文件被执行,但看上去是空的......任何人有任何想法?
最初的想法没有来自我。我只是试图解决它。这可能有点过分了,是的,但是,重写整个当前的功能 - 不仅仅是这两种情况 - 在这个阶段也是一种矫枉过正的事情......但是感谢你采用不同的方法,这当然有帮助。 – Vapire
我猜如果你真的需要一个复杂的依赖关系树,你可以在子文件上有清单,这可能是有意义的。但另一方面,链轮甚至不擅长依赖分辨率,并且只需要重复其他文件。 – max