基於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