2017-09-04 4 views
1

Basierend auf this article, die beschreibt, wie Sie kleine SQL-Manifest-Dateien mit Ritzeln zu schreiben verwenden, habe ich meine SQL-Ansichten und Funktionen automatisch neu erstellt auf jedem rake db:migrate. Dies funktionierte wunderbar bis zum letzten Upgrade auf Rails 5.1Ritzel erfordert keine SQL-Dateien für benutzerdefinierte Rake-Aufgabe

Plötzlich die Manifest-Dateien kompiliert werden, jedoch jede einzelne -Anweisung wird ignoriert, und ich am Ende mit einer leeren Manifest-Datei. Ich habe verschiedene Kommentarstile für die DirectiveProcessor mit und ohne Dateierweiterungen mit und ohne relative Pfade ausprobiert. Egal, was ich anbiete, am Ende habe ich eine leere Datei, die über die DB ausgeführt wird.

mein Setup

db/Funktionen/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/Aufgaben/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 

mein Ergebnis

betrachten das Konsole, wenn ich rails db:functions ausführen, sehe ich folgendes:

(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. 
* 


* 

*/ 

So ist die Datei ausgeführt, sieht aber leer ... Wer noch Ideen hat?

Antwort

-1

Sind Kettenräder nicht ein wenig übertrieben für die Aufgabe, eine Reihe von Dateien einfach zusammenzuführen?

namespace :db do 
    desc 'creates DB functions listed in db/functions.sql' 
    task :functions => :environment do 
    File.open(Rails.root.join('db','functions.sql'), 'w') do |dest| 
     Dir[Rails.root.join('db', 'functions', '*.sql')].each do |f| 
     File.copy_stream(f, dest) 
     end 
    end 
    # ... 
    end 
end 

Wenn Sie sie in einer bestimmten Reihenfolge haben müssen (um Abhängigkeiten zu verwalten) nur ein Array anstelle von Dir[Rails.root.join('db', 'functions', '*.sql')].

+0

Die ursprüngliche Idee war nicht komm von mir. Ich versuche es einfach zu beheben. Es mag ein wenig Overikill sein, ja, aber das Umschreiben der gesamten aktuellen Funktionalität - es gibt mehr als nur diese beiden Fälle - ist in dieser Phase auch ein Overkill ... Aber danke für Ihre unterschiedliche Herangehensweise, das hilft sicherlich. – Vapire

+0

Ich denke, wenn Sie wirklich einen komplexen Abhängigkeitsbaum benötigen, wo Sie ein Manifest auf den Subdateien haben, könnte es Sinn machen. Auf der anderen Seite ist Kettenräder nicht einmal gut in Abhängigkeit Auflösung und erfordert nur die anderen Dateien wiederholt. – max

0

Versuchen Sie, die folgende Zeile in die Pinion Umgebung Konfigurationsblock hinzu:

env.register_bundle_processor 'text/sql', Sprockets::Bundle 

Auch können Sie die folgende Zeile hinzufügen einzeiligen SQL Kommentare zu unterstützen:

env.register_preprocessor 'text/sql', Sprockets::DirectiveProcessor.new(comments: ['--', ['/*', '*/']]) 
Verwandte Themen