我有一个简单的grails应用程序,它本身运行良好。使用带有grails run-app
但是,当我从应用程序中构建docker镜像时,发送到docker的grails命令(如grails run-app --stacktrace
或grails dependency-report --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 Build命令: 从grails应用程序的根目录运行。 用户在docker组中。
docker build -t mygrailsapp .
DockerFile: (构建将在RUN grails依赖项报告--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
Jave:Oracle JDK 1.8.0_77 64
通过sdkman 4.0.32:
Grails 3.14 Groovy 2.4.6 Gradle 2.12
泊坞 客户: 版本:1.10.3 API版本:1.22 转到版本:go1.5.3 Git commit:20f81dd 建造:2016年3月10日星期四15:54:52 OS / Arch:linux / amd64
答案 0 :(得分:22)
当我将使用web
配置文件的 Grails 3.1.4 应用程序移动到新机器时,我遇到了同样的问题。
在我的应用程序根目录中执行gradle clean
会触发正在下载的Grails Maven依赖项,之后grails
命令开始工作。
答案 1 :(得分:5)
我用下一个修复它:
.gradle
目录gradle
目录build
目录现在,我可以使用grails run-app
运行 app 。
答案 2 :(得分:2)
对于有这个问题的其他人,我只是删除了(或者更确切地说,以防万一我需要它)我的构建文件夹然后再次运行,它重新下载所有依赖项并立即开始工作
答案 3 :(得分:2)
我通过删除build
文件解决了这个问题。删除并再次运行可能会解决此问题。
我选择删除它,因为我甚至无法调出grails函数。
您很可能已登陆此页面,因为您在搜索引擎中搜索了错误并将其带到了此处。
症状:当您在以前拥有的现有项目下运行“grails”时(在不同的PC上或从GIT或SVN等源代码控制中运行,并且您错误地包含了“build”目录)。
请参阅此https://mythinkpond.com/2016/11/29/grails-no-profile-found-for-name-web-illegalstateexception/
答案 4 :(得分:1)
为了改善这种情况你可以设置GRADLE_USER_HOME env var,你不必在每次运行docker时构建目录,就在第一次之前,实际上删除了build / .dependencies文件就可以了
VOLUME ["/gradle"]
ENV GRADLE_USER_HOME /gradle
答案 5 :(得分:1)
对我来说,它是通过在./gradlew install
和gradle clean
之后使用命令grails
来实现的。
grails
命令安装了依赖项,./gradlew install
解决了以后的所有错误
答案 6 :(得分:0)
我找到了答案。我不得不从github下载grails配置文件并将它们安装在$ GRAILS_HOME中。在docker文件中设置Grails环境变量之后,我立即放置了这一步。
请参阅下面的示例docker file snippet:
...
# 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
...