web-dev-qa-db-ja.com

Grails3.1.4およびDocker-grailsコマンドは「namewebのプロファイルが見つかりません」を返します

私はそれ自体でうまく動作するシンプルなgrailsアプリを持っています。 grails run-appでgrailsWebプロファイルを使用しても問題はありません。

ただし、アプリからDockerイメージを作成すると、Dockerに送信されたgrails run-app --stacktracegrails dependency-report --stacktraceなどのgrailsコマンドがstacktraceで失敗します。

| Error Error occurred running Grails CLI: No profile found for name [web]. (NOTE: Stack trace has been filtered. Use --verbose to see entire trace.)
Java.lang.IllegalStateException: No profile found for name [web].
    at org.grails.cli.GrailsCli.initializeProfile(GrailsCli.groovy:507)
    at org.grails.cli.GrailsCli.initializeApplication(GrailsCli.groovy:308)
    at org.grails.cli.GrailsCli.execute(GrailsCli.groovy:271)
    at org.grails.cli.GrailsCli.main(GrailsCli.groovy:162)
| Error Error occurred running Grails CLI: No profile found for name [web].

Dockerビルドコマンド:grailsアプリのルートから実行します。ユーザーはdockerグループに属しています。

docker build -t mygrailsapp .

DockerFile :(ビルドはRUNで失敗しますgrailsdependency-report --stacktrace。そのコマンドを削除すると、ビルドは完了します。ただし、アプリをデフォルトのコマンドで初めて実行すると、同じエラーで失敗します。)

#
# My Dockerfile
#
# https://github.com/dockerfile/Java
# https://github.com/dockerfile/Java/tree/master/Oracle-Java8
# https://hub.docker.com/r/mozart/grails/

# Pull base image. 
FROM ubuntu

RUN apt-get update

# install apt-get-repository
RUN \
    apt-get install -y software-properties-common wget unzip git

# Install Java.
RUN \
  echo Oracle-Java8-installer shared/accepted-Oracle-license-v1-1 select true | debconf-set-selections && \
  add-apt-repository -y ppa:webupd8team/Java && \
  apt-get update && \
  apt-get install -y Oracle-Java8-installer
  rm -rf /var/lib/apt/lists/* && \
  rm -rf /var/cache/Oracle-jdk8-installer

# Define working directory.
WORKDIR /data

# Define commonly used Java_HOME variable
ENV Java_HOME /usr/lib/jvm/Java-8-Oracle


# Set customizable env vars defaults.
# Set Grails version (default: 3.1.4; min: 3.0.0; max: 3.1.4).
ENV GRAILS_VERSION 3.1.4

# Install Grails
WORKDIR /usr/lib/jvm

# TODO put grails zips on your own server with decent bandwidth
RUN wget https://github.com/grails/grails-core/releases/download/v$GRAILS_VERSION/grails-$GRAILS_VERSION.Zip && \
    unzip grails-$GRAILS_VERSION.Zip && \
    rm -rf grails-$GRAILS_VERSION.Zip && \
    ln -s grails-$GRAILS_VERSION grails

# Setup Grails path.
ENV GRAILS_HOME /usr/lib/jvm/grails
ENV PATH $GRAILS_HOME/bin:$PATH

# Create App Directory
RUN mkdir /app

# Set Workdir
WORKDIR /app

# Copy App files
COPY . /app

# Run Grails dependency-report command to pre-download dependencies but not
# create unnecessary build files or artifacts.
RUN grails dependency-report --stacktrace

# Set Default Behavior
ENTRYPOINT ["grails"]

CMD ["run-app"]

セットアップ:

Ubuntu 14.04 LTS 64

ジェイブ:Oracle JDK 1.8.0_77 64

Sdkman 4.0.32経由:

Grails 3.14 Groovy 2.4.6 Gradle 2.12

Dockerクライアント:バージョン:1.10.3 APIバージョン:1.22 Goバージョン:go1.5.3 Gitコミット:20f81ddビルド:Thu Mar 10 15:54:52 2016 OS/Arch:linux/AMD64

11
Ed J

Grails 3.1.4webプロファイルを使用するアプリケーションを新しいマシンに移動したときに同じ問題に直面しました。

gradle cleanアプリケーションのルートディレクトリ内でGrailsMavenの依存関係がダウンロードされ、その後grailsコマンドが機能し始めました。

26
Yuri

私は次でそれを修正します:

  1. .gradleディレクトリを削除(または名前変更)します
  2. gradleディレクトリを削除(または名前変更)します
  3. buildディレクトリを削除(または名前変更)します

これで、grails run-appを使用してappを実行できます。

6
Eduardo Cuomo

buildファイルを削除してこれを解決しました。を削除して再実行すると、この問題が解決する場合があります。

Grails関数を呼び出すことすらできないので、削除することにしました。

検索エンジンでエラーを検索したため、このページにたどり着いた可能性があります。

症状:以前に持っていた既存のプロジェクトで「grails」を実行した場合(別のPCで、またはGITやSVNなどのソース管理から、誤って「build」ディレクトリを含めた場合)。

これを参照してください https://mythinkpond.com/2016/11/29/grails-no-profile-found-for-name-web-illegalstateexception/

3
Trainee

この問題を抱えている他の人のために、ビルドフォルダを削除した(または必要に応じて移動した)後、再度実行すると、すべての依存関係が再ダウンロードされ、すぐに機能しました

2
Gibbo

状況を改善するために、GRADLE_USER_HOME env varを設定できます。これにより、Dockerを実行するたびに、実際には初めての直前に、rm you buildディレクトリを作成する必要がなくなります。 build/.dependenciesファイルを削除するとトリックが実行されます

VOLUME ["/gradle"]
ENV GRADLE_USER_HOME /gradle
1

私にとっては、./gradlew installgrailsの後にコマンドgradle cleanを使用して機能しました。

grailsコマンドは依存関係をインストールし、./gradlew installはそれ以降のすべてのエラーを解決しました

1
Zaryab baloch

私は答えを見つけました。 githubからgrailsプロファイルをダウンロードして、$ GRAILS_HOMEにインストールする必要がありました。 DockerファイルでGrails環境変数を設定した直後に、このステップを配置しました。

以下のDockerファイルスニペットの例を参照してください。

...
# Setup Grails path.
ENV GRAILS_HOME /usr/lib/jvm/grails    
ENV PATH $GRAILS_HOME/bin:$PATH

# Setup grails profiles
RUN wget https://codeload.github.com/grails/grails-profile-repository/Zip/master && \
    unzip master && \
    mv grails-profile-repository-master/profiles/ $GRAILS_HOME && \
    rm -rf master && \
    rm -rf grails-profile-repository-master
...
0
Ed J

DockerfileからRUN依存関係レポートを削除し、この問題を修正しました。

ただし、これは依存関係がイメージにインストールされなくなったことを意味し、コンテナーが最初に作成されたときにダウンロードする必要があります。理想的な状況ではありません。

アプリの実行時にWebプロファイルが必要な理由がわかりません。プロファイルによって、grailsアプリケーションのセットアップに使用されるテンプレートが決まると思いました。それが完了したら、なぜ実行時に必要なのですか? 「Webプロファイル」とは正確には何ですか。ダウンロードして追加できるのは単一のファイルですか?

もう1つの奇妙な点は、mozart/grailsから作成されたイメージがRUN依存関係レポートを使用して、WindowsのDockerツールボックスでは正常に実行されますが、LinuxのDockerでは失敗することです。同じイメージが異なるDockerプラットフォームでどのように異なる動作をするのか理解できません。それがDockerのポイントだと思いました。

ここでの回答よりも多くの質問を提供して申し訳ありませんが、これらすべてをよりよく理解することを望んでいます。

0
rhinmass