this articleには、スクローケットを使用して小さなSQLマニフェストファイルを書き込む方法が記載されていますが、rake db:migrate
にはSQLビューと関数が自動的に再作成されます。これはRails 5.1への最後のアップグレードまで素晴らしく機能しましたSprocketsはカスタムレイクタスク用に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.
*
*
*/
だから、ファイルが実行されますが、空に見えます...誰もが任意のアイデアを持っていますか?
をオリジナルのアイデアはしませんでした私から来てください。私は単にそれを修正しようとしています。これはちょっとしたオーバーキルかもしれませんが、現在の機能全体を書き直していますが、この2つのケースだけではありません。この段階では非常に残酷です...しかし、あなたのアプローチが違うと感謝します。 – Vapire
あなたが実際に複雑な依存関係ツリーを必要としているのであれば、それは意味をなさないかもしれないサブファイルのマニフェストを持っていると思います。しかし、一方では、スプロケットは依存性の解決にも優れておらず、他のファイルを繰り返し必要とするだけです。 – max