TheForeman项目开发环境搭建指南
前言
TheForeman是一个开源的服务器生命周期管理工具,它提供物理和虚拟服务器的自动化管理能力。对于开发者而言,搭建一个本地的开发环境是参与项目开发的第一步。本文将详细介绍如何在本地环境中从源代码安装和配置TheForeman项目。
环境准备
系统要求
在开始安装前,需要确保系统满足以下基本要求:
- Ruby版本:建议使用2.7.6版本
- NodeJS:需要安装NodeJS以支持前端构建
- PostgreSQL:推荐使用12或更高版本作为数据库后端
- 开发工具:包括gcc、git等基础开发工具
不同系统的安装方法
Fedora系统
Fedora自带的Ruby版本可能过高,建议使用rbenv管理Ruby版本:
sudo dnf install rbenv ruby-build-rbenv nodejs
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
source ~/.bashrc
rbenv install 2.7.6
Enterprise Linux 8系统
EL8默认提供的软件包版本较低,需要启用新版本模块:
dnf module enable ruby:2.7
dnf module enable postgresql:12
dnf module enable nodejs:14
然后安装开发工具包:
dnf groupinstall "Development Tools" "Development Libraries"
dnf -y install gcc-c++ git ruby ruby-devel rubygem-bundler \
libvirt-devel postgresql-devel openssl-devel \
libxml2-devel libxslt-devel zlib-devel \
readline-devel systemd-devel tar libcurl-devel nodejs
PostgreSQL安装配置
对于基于RPM的系统,PostgreSQL安装步骤如下:
sudo dnf install postgresql-server
sudo postgresql-setup --initdb
sudo systemctl enable --now postgresql
sudo -u postgres createuser --createdb $USER
项目设置
获取源代码
首先需要克隆项目仓库:
git clone {你的仓库地址}/foreman.git -b develop
cd foreman
cp config/settings.yaml.example config/settings.yaml
cp config/database.yml.example config/database.yml
Ruby环境配置
如果使用rbenv,可以设置本地Ruby版本:
rbenv local 2.7.6
安装依赖
安装项目所需的Ruby和NodeJS依赖:
bundle install
npm install
常见问题处理:
- 安装pg gem失败时,可以尝试指定pg_config路径:
gem install pg -v '{PG_VERSION}' -- --with-pg-config=/usr/pgsql-13/bin/pg_config
- ruby-libvirt gem报错时,可能需要设置PKG_CONFIG_PATH:
export PKG_CONFIG_PATH=/usr/lib64/pkgconfig
数据库配置
数据库初始化
确保config/database.yml
中development部分的配置正确后,执行:
bundle exec rake db:create
bundle exec rake db:migrate
SEED_ADMIN_PASSWORD=changeme bundle exec rake db:seed
对于测试环境,还需要额外执行:
RAILS_ENV=test bundle exec rake db:create
RAILS_ENV=test bundle exec rake db:migrate
运行Foreman
基本运行方式
最简单的启动方式是:
bundle exec foreman start
分离运行模式
为了提高开发效率,可以将前端和Rails分开运行:
# 启动Rails服务
bundle exec rails s -b 0.0.0.0 -p 3000
# 启动前端构建
bundle exec foreman start webpack
环境变量配置
可以通过.env
文件自定义环境变量,常用选项包括:
REDUX_LOGGER
:控制是否在控制台打印Redux调用NOTIFICATIONS_POLLING
:设置通知轮询间隔(毫秒)NODE_OPTIONS
:用于npm操作的NodeJS选项
开发辅助功能
密码重置
忘记管理员密码时可以通过以下命令重置:
bundle exec rake permissions:reset password=changeme
模拟数据生成
生成测试用模拟数据:
bundle exec rake seed:forgeries
查看所有rake任务
bundle exec rake -T
测试相关
RuboCop测试
运行代码风格检查:
bundle exec rubocop [<文件路径>]
自动修复可安全修复的问题:
bundle exec rubocop --auto-correct
单元测试
运行所有测试:
bundle exec rake test [TEST=<文件路径>]
运行特定测试:
bundle exec rails test <文件路径>:<测试行号>
集成测试
集成测试需要ChromeDriver支持。运行前需要编译前端资源:
npm install
bundle exec rake webpack:compile
bundle exec rake test TEST=test/integration/<测试文件> [DEBUG_JS_TEST=1]
调试技巧:
- 添加
DEBUG_JS_TEST=1
可以在浏览器中运行测试 - 添加
SHOW_JS_LOG=1
可以查看所有JavaScript日志
调试技巧
使用Pry调试
Pry是一个强大的Ruby调试工具,在代码中插入:
require 'pry'; binding.pry
常用命令:
step
:单步进入方法next
:单步跳过方法finish
:执行到当前方法结束continue
:继续执行
插件开发
安装插件
从本地源码安装:
echo "gem '<插件名>', path: '../插件路径'" >> bundler.d/<插件名>.local.rb
从远程仓库安装:
echo "gem '<插件名>', git: '插件仓库地址'" >> bundler.d/<插件名>.local.rb
安装后执行:
bundle install
bundle exec rake db:migrate
bundle exec rake db:seed
插件测试
运行插件所有测试:
npm install
bundle exec rake webpack:compile
bundle exec rake test:<插件名>
运行特定测试:
bundle exec rake test TEST="../<插件路径>/test/测试路径"
结语
通过本文的指导,您应该已经成功搭建了TheForeman的开发环境。这套环境不仅支持基本的开发工作,还提供了完整的测试和调试工具链,为后续的代码贡献和功能开发奠定了坚实基础。在开发过程中,如果遇到任何问题,可以参考项目文档或社区资源寻求帮助。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考