维护最新的开发环境

我正在尝试设置一个新的开发机器,但缺少 bundler。我查看了 https://raw.githubusercontent.com/discourse/install-rails/master/linux,发现它仍在安装 ruby_version="2.7.6"。重新运行该脚本似乎从来都不是更新开发机器的可靠方法。

其他人是怎么做的?大家真的都在使用 Install Discourse for development using Docker 吗?

为了开发我的仪表板,我通过一个 pfaffmanager-discourse 脚本在命令行上传递了许多设置,该脚本还将拉取最新的 discourse 并迁移数据库。我想我也可以在 docker 版本中以某种方式实现这一点。

是我思想老旧,认为应该有一个本地开发实例,而不是在 docker 中进行?

我一直使用 ansible 来设置新机器,该设置唯一缺少的是一个 discourse 开发脚本。其他人会想要这样的东西吗?我们可以将其移至核心,以便您可以只克隆 discourse,然后运行一个 playbook 来获取正确版本的 Ruby 和 imagemagick 以及其他任何东西吗?

1 个赞

据我所知,开发团队中的几乎每个人都使用本地开发环境。

我一直在使用 asdf 来管理我使用的许多工具的版本,所以对我来说,只需要

asdf install ruby 3.1.3
asdf local ruby 3.1.3

即可在新 Ruby 中运行 Discourse。

对我来说非常有用,因为 我一直在对不同 Ruby 版本的 Discourse 进行基准测试 并处理 Ruby 升级。

5 个赞

我暂时迁移到了 Docker Compose 解决方案,并使用 Dockerfile 来构建我正在开发的 Discourse。对于基本功能,目前运行良好,但显然比直接在“裸金属”Ubuntu 环境中运行要慢一些……

2 个赞

离题了,是的,我对 YJIT !! 印象深刻……Discourse 已经完全支持 Ruby 3.2 了吗?

4 个赞

他们是否使用某个秘密仓库来保持更新?

谢谢!asdf 很有帮助!我想我以前见过它,但想避免使用另一个包管理器。如果它对您来说足够好,我将全力支持。

而且安装脚本中的 nodejs 似乎也已过时。最近的安装是 v18.12.1,而脚本安装的是 16。

所以看起来像

          git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.10.2
          asdf plugin add ruby https://github.com/asdf-vm/asdf-ruby.git
          asdf plugin add imagemagick
          asdf install imagemagick 7.1.0-55
          asdf plugin add nodejs
          asdf install nodejs 18.12.1

假设您以某种方式将此添加到您的 .bashrc(或类似文件)中:

. $HOME/.asdf/asdf.sh
. $HOME/.asdf/completions/asdf.bash

并安装这些 gem:

      - bundler
      - discourse_theme
      - minitar
      - listen
      - rb-fsevent
      - rb-inotify
      - ffi
      - multipart-post
      - tty-prompt
      - pastel
      - tty-color
      - tty-reader
      - tty-screen
      - advancecomp
      - gifsicle
      - jpegoptim
      - libjpeg-progs
      - optipng
      - pngcrush
      - pngquant
      - jhead
      - rails

不过,我可能出于某种原因添加了其中一些,而不是 Discourse,虽然我不确定。

还有

apt-get install -y git build-essential libxslt1-dev libcurl4-openssl-dev libksba8 \
libksba-dev libreadline-dev libssl-dev zlib1g-dev libsnappy-dev \
sqlite3 libsqlite3-dev postgresql postgresql-server-dev-all \
postgresql-contrib libpq-dev redis-server golang-go
go get github.com/mailhog/MailHog

(可能不是那个顺序)差不多了。当前 Ubuntu 自带的 redis 对 99% 的开发者来说已经足够好了 (它是 7.0.7 而不是 6.x) 哦!现在包含的是 7.0.7。但也有一个用于 redis 的 asdf 插件。

这样的脚本在 node、imagemagick 或 Ruby 的版本更新时,在核心中会很容易维护,然后一个懒惰的开发者可以每周或每次拉取一次来运行该脚本,就能拥有一个最新的开发环境。花一两个小时,一个聪明的人就可以将其做得足够跨平台,支持 Linux、Mac/homebrew 和 Windows/WSL。我很庆幸现在无法轻松访问 Windows,所以我不打算 volunteered。

但我认为,如果我关注 discourse_docker 的变化,我可能会注意到它们何时更新,而我为我的 newmachine ansible playbook 添加的那些临时修改现在可能可以完成这项工作。

谢谢你的建议!我认为我现在可以通过一个命令在任何机器上设置开发环境了。

1 个赞

虽然我明白让所有东西自动处理有多酷,但对我来说,管理我的开发环境、更新等是工作的重要组成部分。

这对新人来说很糟糕,而像 GitHub Codespaces 这样的工具在这方面大放异彩,但对于每天沉浸在 Discourse 开发中的人来说,理解和能够操作开发环境有助于了解各个部分是如何协同工作的。

2 个赞

嗯,进行 Ruby 基准测试的那个人远非典型的开发者,但说得有理!我想我们管理事物的方式都有点不同。

多亏了你推荐的 asdf,我想有了它,我就能在我不同的机器上保持条理清晰了。

1 个赞

我已经完成了大部分 3.1 的兼容性工作,所以我们已经为 3.2 的更新做好了准备,并将很快完成。

4 个赞

Falco,我能和你确认一下这个吗?:

rake dev:populate

现在似乎会产生一个错误:

Psych::DisallowedClass: Tried to load unspecified class: Date

这与新的 Ruby 或 Rails 版本有关吗?

更多信息:

我很好奇 新的 YJIT 能将 TTFB 提高多少

1 个赞

此问题在最新版本中已解决,感谢修复它的人! :pray: 这是一个帮助高效构建测试夹具的关键功能。

1 个赞

此主题在上次回复后 30 天自动关闭。不再允许回复。