CircleCI 容器中奇怪的 JRuby 解释器问题
Weird JRuby Interpreter Issue(s) in CircleCI Containers
我正在尝试在容器化 CI 环境中激活 JRuby,机器是 运行ning Ubuntu: Linux-3.13.0-91-generic-x86_64-with-Ubuntu-12.04-precise
,特别是我有一个正在创建 WAR 个文件的脚本:
#!/bin/bash --login
if [ "" == "" ]; then
BUILD_ENV="production"
else
BUILD_ENV=""
fi
echo "Building for: $BUILD_ENV"
rvm install jruby-9.1.2.0
rvm use jruby-9.1.2.0
rvm get head
function nightly_ci() {
if [[ "$(python -mplatform)" =~ .*Ubuntu*. ]]; then
export PATH="$PATH:$HOME/.rvm/scripts/rvm"
chmod 755 ~/.rvm ~/.bashrc && echo rvm_autoupdate_flag=0 >> ~/.rvmrc
printf '%s' '[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"' >> ~/.bashrc
fi
}
nightly_ci
# install and package all gems (fixes issues with :gem/:ref gemfile)
echo "bundle install --without development test profile"
bundle install --without development test profile
echo "bundle package --all"
bundle package --all
# build war file, smartroom.war
echo "RAILS_ENV=$BUILD_ENV bundle exec rake assets:precompile"
RAILS_ENV=$BUILD_ENV bundle exec rake assets:precompile --trace
echo "RAILS_ENV=$BUILD_ENV bundle exec warble war"
RAILS_ENV=$BUILD_ENV bundle exec warble war --trace
这在本地主机上运行良好,并且在容器化环境中 运行 也将运行良好 ,但仅在从命令行显式调用 JRuby 解释器之后。
例如,我 运行 我的脚本 运行 下载 JRuby,确保路径设置正确,捆绑安装必要的 gem,然后制作 WAR.但是,这在容器化环境中不起作用,因为捆绑安装使用本机 Ruby 版本中的 gem,并且没有将正确的 gem 安装到 JRuby 中。如果我在脚本执行后键入 rvm install jruby-9.1.2.0
,它会告诉我 JRuby 已经安装 ,然后如果我重新 运行 脚本,它会完全正常工作。 我在想可能是我的 bash 配置文件配置错误,但事实并非如此。这是我在容器上的 bashrc:
source ~/.circlerc &>/dev/null
export PATH="$PATH:$HOME/.rvm/bin" # Add RVM to PATH for scripting
# The next line updates PATH for the Google Cloud SDK.
source '/opt/google-cloud-sdk/path.bash.inc'
# The next line enables shell command completion for gcloud.
source '/opt/google-cloud-sdk/completion.bash.inc'
### Added by the Heroku Toolbelt
export PATH="/usr/local/heroku/bin:$PATH"
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
还有我的.profile:
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
export PATH="$PATH:$HOME/.rvm/bin" # Add RVM to PATH for scripting
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function*
我的JRuby版本:jruby 9.1.2.0 (2.3.0) 2016-05-26 7357c8f Java HotSpot(TM) 64-Bit Server VM 24.76-b04 on 1.7.0_76-b13 +jit [linux-x86_64]
最后,我尝试通过 shell 以编程方式调用确切的命令集,(这需要完成,因为我试图在夜间自动生成 WAR -构建),脚本完成后重新运行脚本但无济于事。我希望你们能有一些见识。
通过更改执行我的包脚本的循环阶段解决了这个问题我确定这是 rvm 1.26.10 的问题。
我正在尝试在容器化 CI 环境中激活 JRuby,机器是 运行ning Ubuntu: Linux-3.13.0-91-generic-x86_64-with-Ubuntu-12.04-precise
,特别是我有一个正在创建 WAR 个文件的脚本:
#!/bin/bash --login
if [ "" == "" ]; then
BUILD_ENV="production"
else
BUILD_ENV=""
fi
echo "Building for: $BUILD_ENV"
rvm install jruby-9.1.2.0
rvm use jruby-9.1.2.0
rvm get head
function nightly_ci() {
if [[ "$(python -mplatform)" =~ .*Ubuntu*. ]]; then
export PATH="$PATH:$HOME/.rvm/scripts/rvm"
chmod 755 ~/.rvm ~/.bashrc && echo rvm_autoupdate_flag=0 >> ~/.rvmrc
printf '%s' '[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"' >> ~/.bashrc
fi
}
nightly_ci
# install and package all gems (fixes issues with :gem/:ref gemfile)
echo "bundle install --without development test profile"
bundle install --without development test profile
echo "bundle package --all"
bundle package --all
# build war file, smartroom.war
echo "RAILS_ENV=$BUILD_ENV bundle exec rake assets:precompile"
RAILS_ENV=$BUILD_ENV bundle exec rake assets:precompile --trace
echo "RAILS_ENV=$BUILD_ENV bundle exec warble war"
RAILS_ENV=$BUILD_ENV bundle exec warble war --trace
这在本地主机上运行良好,并且在容器化环境中 运行 也将运行良好 ,但仅在从命令行显式调用 JRuby 解释器之后。
例如,我 运行 我的脚本 运行 下载 JRuby,确保路径设置正确,捆绑安装必要的 gem,然后制作 WAR.但是,这在容器化环境中不起作用,因为捆绑安装使用本机 Ruby 版本中的 gem,并且没有将正确的 gem 安装到 JRuby 中。如果我在脚本执行后键入 rvm install jruby-9.1.2.0
,它会告诉我 JRuby 已经安装 ,然后如果我重新 运行 脚本,它会完全正常工作。 我在想可能是我的 bash 配置文件配置错误,但事实并非如此。这是我在容器上的 bashrc:
source ~/.circlerc &>/dev/null
export PATH="$PATH:$HOME/.rvm/bin" # Add RVM to PATH for scripting
# The next line updates PATH for the Google Cloud SDK.
source '/opt/google-cloud-sdk/path.bash.inc'
# The next line enables shell command completion for gcloud.
source '/opt/google-cloud-sdk/completion.bash.inc'
### Added by the Heroku Toolbelt
export PATH="/usr/local/heroku/bin:$PATH"
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
还有我的.profile:
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
export PATH="$PATH:$HOME/.rvm/bin" # Add RVM to PATH for scripting
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function*
我的JRuby版本:jruby 9.1.2.0 (2.3.0) 2016-05-26 7357c8f Java HotSpot(TM) 64-Bit Server VM 24.76-b04 on 1.7.0_76-b13 +jit [linux-x86_64]
最后,我尝试通过 shell 以编程方式调用确切的命令集,(这需要完成,因为我试图在夜间自动生成 WAR -构建),脚本完成后重新运行脚本但无济于事。我希望你们能有一些见识。
通过更改执行我的包脚本的循环阶段解决了这个问题我确定这是 rvm 1.26.10 的问题。