首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的应用程序中有太多的Ruby版本--哪个版本是真正必要的?

我的应用程序中有太多的Ruby版本--哪个版本是真正必要的?
EN

Stack Overflow用户
提问于 2022-07-18 15:22:42
回答 1查看 57关注 0票数 0

我有一个红宝石rails 7应用程序,所以我有红宝石列在我的宝石文件。

应用程序/Gemfile

代码语言:javascript
复制
source "https://rubygems.org"
git_source(:github) { |repo| "https://github.com/#{repo}.git" }

ruby "~> 3.1"

# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem "rails", "~> 7.0.0"

但是除了“标准”Rails应用程序之外,我还利用一个带有Dockerfile的Dockerfile来构建一个码头容器,因为我使用Github编码空间。我对码头相当初级,所以我或多或少地使用了微软提供的样板,其开头如下:

代码语言:javascript
复制
# # [Choice] Ruby version (use -bullseye variants on local arm64/Apple Silicon): 3, 3.1, 3.0, 2, 2.7, 2.6, 3-bullseye, 3.1-bullseye, 3.0-bullseye, 2-bullseye, 2.7-bullseye, 2.6-bullseye, 3-buster, 3.1-buster, 3.0-buster, 2-buster, 2.7-buster, 2.6-buster
ARG VARIANT=3.1-bullseye
# Note the images provided by Microsoft have some pre-installed packages
# to make them work out of the box for dev container feature
FROM mcr.microsoft.com/vscode/devcontainers/ruby:0-${VARIANT}

但是,为了管理ruby和其他库的版本,我还添加了一个名为ASDF的版本管理器,因此在同一个dockerfile中添加了一个更深入的版本管理器,其内容如下:

代码语言:javascript
复制
# # Environment variables
ARG RUBY_VERSION latest

RUN git clone --depth 1 https://github.com/asdf-vm/asdf.git $HOME/.asdf && \
    echo '. $HOME/.asdf/asdf.sh' >> $HOME/.bashrc && \
    echo '. $HOME/.asdf/completions/asdf.bash' >> $HOME/.bashrc && \
    echo '. $HOME/.asdf/asdf.sh' >> $HOME/.profile
# ASDF steps: install asdf ruby plugin, then a ruby version, then set our machine e.g our container's global Ruby version
RUN bash -c "source $HOME/.bashrc  && 
    asdf plugin add ruby https://github.com/asdf-vm/asdf-ruby.git &&
    asdf install ruby $RUBY_VERSION &&
    asdf global ruby $RUBY_VERSION"

因此,总的来说,这大约是3个地方,我认为有Ruby得到安装。我觉得这太多了,不是很好的练习。我是否应该从我的宝石文件中删除ruby,并且在toip上只保留ASDF,因为这是我管理ruby版本的工具吗?

我要留两个吗?推荐什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-18 16:22:04

您通常不应该在Docker中使用版本管理器(asdfrbenvrvm、.)。在机械层面上,大多数运行Docker容器的路径都不读取您设置的.bashrc.profile文件,您需要一个相当迂回的路径来“激活”版本管理器。就风格而言,Docker映像只包含一个应用程序及其运行时,因此您只需要在其容器的上下文中使用一个Ruby版本,图像的FROM行就足够了。

您应该在Gemfile中保留ruby约束,这有助于确保在其他环境中有兼容版本的Ruby (例如,在非Docker桌面设置中使用asdf )。您需要在映像的FROM行中使用Ruby版本,以便Docker知道要使用哪个基本映像。

在您的示例中,没有安装或调用asdf,基本映像已经有Ruby3.1可用,因此您不需要做任何额外的工作来(重新)安装它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73024770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档