5

web-appGrails アプリを作成すると、ディレクトリにいくつかの既定のファイルが作成されます。

$ ウェブアプリを見つける
ウェブアプリ
ウェブアプリ/css
web-app/css/errors.css
web-app/css/main.css
web-app/css/mobile.css
ウェブアプリ/画像
web-app/images/apple-touch-icon-retina.png
web-app/images/apple-touch-icon.png
web-app/images/favicon.ico
web-app/images/grails_logo.jpg
web-app/images/grails_logo.png
web-app/images/leftnav_btm.png
web-app/images/leftnav_midretch.png
web-app/images/leftnav_top.png
ウェブアプリ/画像/スキン
web-app/images/skin/database_add.png
web-app/images/skin/database_delete.png
web-app/images/skin/database_edit.png
web-app/images/skin/database_save.png
web-app/images/skin/database_table.png
web-app/images/skin/exclamation.png
web-app/images/skin/house.png
web-app/images/skin/information.png
web-app/images/skin/shadow.jpg
web-app/images/skin/sorted_asc.gif
web-app/images/skin/sorted_desc.gif
web-app/images/spinner.gif
web-app/images/springsource.png
ウェブアプリ/js
web-app/js/application.js

META-INFおよびWEB-INF出力から切り取られたフォルダー)

これらのファイルは、アプリ内で混乱を引き起こします。また、自分のリソースに使用する可能性が高い共通のディレクトリ名cssimages、およびを使用します。js

過去にこれらを手動で削除しましたが、実行後grails upgradeに自動的に返され、その過程で自分のファイルが上書きされます。

これらのファイルを保持する理由がわかりません。足りないものはありますか?そうでない場合、どうすればそれらを取り除き、二度と戻ってこないようにすることができますか?

4

2 に答える 2

9

Burt Beckwithによると、これに対する正しい解決策は を使用しないことgrails upgradeです。どうやら、これは Grails アプリケーションをアップグレードするための推奨される方法ではなくなったようです。これは、バージョンを上げてからアプリをクリーンアップして、すべてを再ダウンロードするという 2 つの重要なことしか実行しないためです。

マイナーアップグレード

その投稿から、小規模なバージョン変更の推奨プロセスは次のとおりです。

  1. バージョンを編集application.propertiesして更新します。
  2. 次に、実行grails cleanして古いファイルを消去します。
  3. 最後に実行するgrails compileと、Hibernate および Tomcat プラグインをアップグレードするかどうかを尋ねられます (それらが にリストされている場合BuildConfig.groovy)。

フォルダーの下の作業フォルダーにある古いプラグインを手動で削除することもでき$HOME/.grailsます。

Burt が提供するもう 1 つのヒントは次のとおりです。

に追加するgrails.project.work.dir = 'target'とさらに簡単ですBuildConfig.groovy。次に、すべてのプラグインがそこにあり、ターゲットフォルダー全体を削除するだけで、すべてのプラグインが再インストールおよび/または更新され、すべてのクラスが再コンパイルされます.

主要なアップグレード

メジャー アップデート (1.x アプリから 2.x アプリへのアップグレードなど) のプロセスは、もう少し複雑です。

  • 新しいバージョンの Grails で新しい空のアプリを作成する
  • 古いバージョンの Grails で新しい空のアプリを作成する
  • 現在のアプリと空の古いバージョンのアプリを比較すると、何を削除、追加、変更したかがわかります。新しいファイルをコピーし、削除する必要があるものを削除し、行った変更をやり直します。Grails の中間バージョンのリリース ノートとアップグレード情報を必ず読んで、新しい変更 (例: HSQLDB -> DataSource.groovy の H2 など) を行う方法を理解してください。盲目的に同じ変更を加えないでください。

アップグレードプロセスは複雑すぎて効果的に自動化できないため、これは理にかなっているので、最終的には公式ドキュメントに記載されることを願っています.


新しいアプリケーション

ただし、これは新しいアプリケーションの処理方法を説明するものではありません。もちろん、単純に Grails 固有のファイルをすべて削除することもできます (スキャフォールディングを使用しない限り、この方法をお勧めします)。

もう 1 つのオプションは、すべての Grails 固有のファイルを何らかのサブディレクトリに移動し、mainレイアウト、CSS ファイル、およびリソース リンクを手動で変更 (および/または名前変更) して、これらの新しい場所を指すようにすることです。

それでもスキャフォールディングを使用したい場合は、main.gspレイアウトをscaffolding.gspにコピーし、デフォルトの CSS および JS 要件をすべて含むスキャフォールディング専用の新しいリソース モジュールを作成することをお勧めします。次にgrails install-templates、 を実行します。これにより、足場用の基本的なビュー テンプレートが提供されます。その後、レイアウトを簡単に変更し、正しいリソース モジュールを追加または更新できます。

最後に、必要な方法でベース アプリケーションを作成したら、圧縮して後で使用できるように保存します。これは少なくとも、これらすべてを 1 回だけ実行するだけの簡単な方法です。

テンプレートをインストールした後は、 の下にあるまたはテンプレート フォルダー
はおそらく必要ありません。それらを使用していることがわかっている場合を除き、それらは削除する必要があります。artifactswarsrc/templates


最後に、git や mercurial などの優れた堅牢なバージョン管理システムを使用していることを確認してください。これにより、誤って を実行した場合に何が変更されたかを簡単に確認でき、grails upgrade変更したくないファイルを破棄またはロールバックできます。適切な IDE または GUI を使用すると、通常、数回クリックするだけでこれを修正できます。

于 2012-07-20T08:11:27.267 に答える
1

grails プロジェクトのディレクトリ スクリプトの下に、_Events.groovy を作成する必要があります。

アップグレード スクリプトは 2 つのイベントを発生させるため、既存のファイルをコピーし、スクリプトに処理を任せて、最後にそれらのファイルを置き換えることができます。

だからそれはそのようなものを与えるでしょう

eventStatusUpdate = { msg ->
    def listenMsg = "Please make sure you view the README for important information about changes to your source code."
    if(msg == listenMsg) {
        copy(todir: "<the dir you want to put your stuff>") {
            fileset(dir: "${basedir}/web-app") {
                include(name: "**/**")
                exclude(name: "WEB-INF/**")
                present(present: "srconly", targetdir: "${basedir}/web-app")
            }
        }
    }  
}

eventStatusFinal = { msg ->
    if(msg == "Project upgraded") {
        copy(todir: "${basedir}/web-app") {
            fileset(dir: "<the dir with your stuff...>") {
                include(name: "**/**")
                exclude(name: "WEB-INF/**")
                present(present: "srconly", targetdir: "${basedir}/web-app")
            }
        }
    }    
}
于 2012-07-16T15:14:07.693 に答える