* Remove hardcoded instances of education field * WIP Access display_email_on_profile via User Settings * Remove unused profile column * WIP Fix reference to bg_color_hex and text_color_hex * WIP fix issues revealed by systems specs * WIP fix issues revealed by services specs * WIP Fix failing tests * WIP Fix spec failures * wip * Move two attributes from controller to decorator * Update comment * Match user settings changes * More consistently use user.tag_line Even before the profile changes we sometimes used the user.summary attribute directly but used the user.tag_line method in other places. * Remove delegation, rename inline concern * Drop profile columns from users table * Remove duplicated work display from header * Update work profile field handling * Update DUS + spec * Delegate more carefully * Update delegation guard * Adapt for removed delegation * Undo accidental schema changes * Fix seeds * Remove accidentaly change * Fix User#processed_website_url * Update guard clause * Update profile card content * Add Organization#profile * Be more conservative with profile fields * Spec fixes round 1 * Fix typo * Update spec * Limit number of header fields and update card content * Decorate correct model * Update factory * Update schema.rb * Fix validation * How bad could this possibly be? * Pretty bad, nevermind * Remove obsolete code * Reset profile fields during test runs * Move profile fields back to before(:suite) * Spec fixes * Remove accidentally re-added files * More spec fixes * Specs * Change User#tag_keywords_for_search * More spec fixes * Add comment * Undo accidental schema changes * Attempt spec fix * Remove fix attempt * Fix e2e test * Update spec * Remove guard clause * Remove hardcoded instances of education field * WIP Access display_email_on_profile via User Settings * Remove unused profile column * WIP fix issues revealed by systems specs * WIP fix issues revealed by services specs * WIP Fix failing tests * WIP Fix spec failures * wip * Move two attributes from controller to decorator * Update comment * More consistently use user.tag_line Even before the profile changes we sometimes used the user.summary attribute directly but used the user.tag_line method in other places. * Remove education * Add comment * WIP * Clean up mostly_work_with * WIP * Update work profile field handling * More work-related changes * Remove settings_only from display_area enum * Remove quickfix from _metadata partial * Remove special attributes * Remove leftover spec * Retrieve location from profile, not user * Profile.special_attributes no longer exists * Update specs * More spec fixes * Update UsersController * Update UsersController and spec * Fix e2e seeds * Minor cleanup * More e2e seed fixes * Fix profile field CSV * Fix e2e seeds * Move one more attribute in e2e seeds * Remove duplicate line * Clear inputs before typing in them * Fix formatting issues * Profiles::Update -> Users::Update * Remove RegistrationsController#resolve_profile_field_issues * Fix schema.rb * More cleanup * Fix specs * Fix remaining spec Co-authored-by: Jacob Herrington <jacobherringtondeveloper@gmail.com>
11 KiB
| title |
|---|
| Windows |
Installing Forem on Windows 10
Installing prerequisites
These prerequisites assume you're working on a 64-bit Windows 10 operating
system machine
- updated to version 1903, Build 18362 or higher for x64 system
- updated to version 2004, Build 19041 or higher for ARM64 system
For further information regarding system requirements, head over to the Microsoft Docs or Microsoft's blog on extending WSL 2 Support.
To check your Windows version, press Win Logo key + R, type winver, then
click OK.
There are other ways to get Forem running on lower versions, but we recommend a complete WSL 2 installation.
Installing WSL
Since Forem's codebase is using the Ruby on Rails framework, we will need to install the Windows Subsystem for Linux (WSL). Some dependencies used by the source code triggered errors when installing on Windows, so using WSL allows you to work on the software and not having to fix gem incompatibilities.
Follow the instructions for Installing the Windows Subsystem for Linux. Once you've installed WSL, complete all the instructions under the following sections in the link above:
- Update to WSL 2.
- Enable the "Virtual Machine Platform" optional component. Be sure to reboot your machine after this step.
- Set WSL 2 as your default version.
Once all the steps mentioned above are completed, install Ubuntu 18.04 on Windows.
On your first run, the system will ask for username and password. Take note of
both since it will be used for sudo commands. More information about the
process can be found at
create a user account and password for your new Linux distribution
Installing rbenv
rbenv is a version manager for Ruby applications which allows one to guarantee
that the Ruby version in development environment matches production. First,
install Ruby language dependencies before installing rbenv:
sudo apt-get update
sudo apt-get install git-core curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev software-properties-common libffi-dev
Now, we install rbenv using the following commands:
cd
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
exec $SHELL
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
echo 'export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"' >> ~/.bashrc
exec $SHELL
One can verify rbenv installation using the rbenv-doctor script with the
following commands:
curl -fsSL https://raw.githubusercontent.com/rbenv/rbenv-installer/main/bin/rbenv-doctor | bash
Installing nvm
As a pre-requisite to install Rails, Node.js needs to be installed. nvm is a Node.js version manager that helps a developer select a specific Node.js version for development.
To install nvm, follow the instructions outlined in the
official nvm documentation.
Be sure to reload the shell with the command exec $SHELL after the
installation is complete.
Run the following command to verify that nvm is installed:
command -v nvm
If the shell outputs nvm, the installation is successful. Installation of the
correct Node.js version will be done in a later part of the installation
process.
Yarn
The fastest way to install Yarn for WSL would be from Debian package repository. Configure the repository with the following commands:
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
Since we do not have Node.js installed yet, we will be installing Yarn without the default Node.js with the following command:
sudo apt update && sudo apt install --no-install-recommends yarn
To verify Yarn's installation, run the command yarn -v. It should print
Yarn requires Node.js 4.0 or higher to be installed.. This indicates that the
Yarn installation succeeded but Node.js still needs to be installed for it to
work fully. We install Node.js later on in the installation process.
PostgreSQL
Forem requires PostgreSQL version 11 or higher. To Install PostgreSQL on WSL, follow steps under the PostgreSQL APT Repository section.
Once Installed, perform the following steps in order to set up a username and password for PostgreSQL:
-
Use
sudo -i service postgresql startto start the server. -
Next, replace
$YOUR_USERNAMEin the following commands with your Linux Username and execute them:sudo -u postgres createuser -s $YOUR_USERNAME createdb sudo -u $YOUR_USERNAME psql -
You should now be in PostgreSQL's shell interface. Execute
\passwordto set a password for your PostgreSQL user. -
Be sure to make a note of your username and password for future use. Exit PostgreSQL by executing the command
\quit.
For additional configuration options, check our PostgreSQL setup guide.
ImageMagick
Forem uses ImageMagick to manipulate images on upload.
ImageMagick can be installed to WSL via installing its imagemagick package with the following command:
sudo apt update && sudo apt install imagemagick
To verify its installation, run identify -version command.
Redis
Forem requires Redis version 6.0 or higher.
We recommend to follow this guide to run Redis under WSL.
Installing Forem
-
Fork Forem's repository, eg. https://github.com/forem/forem/fork
-
Clone your forked repository, eg.
git clone https://github.com/<your-username>/forem.git -
Open the cloned forem folder in terminal with
cd forem. Next, install Ruby with the following commands:rbenv install $(cat .ruby-version) rbenv global $(cat .ruby-version) ruby -v -
Install Node.js with the following set of commands:
nvm install $(cat .nvmrc) nvm use $(cat .nvmrc) node -v yarn -v -
Install bundler with
gem install bundler -
Set up your environment variables/secrets
-
Take a look at
.env_sample. This file lists all theENVvariables we use and provides a fake default for any missing keys. -
If you use a remote computer as dev env, you need to set
APP_DOMAINvariable to the remote computer's domain name. -
The backend guide will show you how to get free API keys for additional services that may be required to run certain parts of the app.
-
For any key that you wish to enter/replace:
- Create
.envby copying from the provided template (ie. with bash:cp .env_sample .env). This is a personal file that is ignored in git. - Obtain the development variable and apply the key you wish to enter/replace. ie:
export GITHUB_KEY="SOME_REAL_SECURE_KEY_HERE" export GITHUB_SECRET="ANOTHER_REAL_SECURE_KEY_HERE" - Create
-
You do not need "real" keys for basic development. Some features require certain keys, so you may be able to add them as you go.
-
-
After ensuring that the PostgreSQL server and the Redis server are running, run
bin/setup.The
bin/setupscript is responsible for installing a varienty of dependencies. One can find it inside thebinfolder by the name ofsetup.- Its first task is to install the
bundlergem. Next, it will makebundlerinstall all the gems, includingRails, located inGemfilein the root of the repository. It also installsforeman. - It then installs JavaScript dependencies using the script in
bin/yarnfile. These dependencies are located inpackage.jsonin the root of the repository. - Next, it uses various Rake files located inside the
libfolder for the PostgreSQL database creation and updation. - Finally it cleans up all the log files and restarts the Puma server.
- Its first task is to install the
Possible error messages
-
There is a possibility that you might encounter a statement timeout when seeding the database for the first time. Please increase the value of
statement_timeoutto9999999inconfig/database.yml. -
If the installation process failed with the following error
ERROR: Error installing pg. Please consider installing the following packagelibpq-dev:
sudo apt-get install libpq-dev
- If the command
bin/setupfails at installingcld-0.8.0with the warnings'aclocal-1.10' is missing on your systemand'automake-1.10' is missing on your system. Please installautomake-1.10using the commands below.
cd
sudo apt-get update
sudo apt-get install autoconf
wget https://ftp.gnu.org/gnu/automake/automake-1.10.tar.gz
tar xf automake-1.10.tar.gz
cd automake-1.10/
./configure --prefix=/usr/local
make
WSL2 and System test
In WSL2, hostname/IP address are no longer shared between Windows and Linux. There are currently two work-arounds.
-
Use dockerized selenium, ie docker-selenium. You will need docker for the following steps
docker run -d --name selenium-hub -p 4444:4444 selenium/hub:3.141.59-20200409CH=$(docker run --rm --name=ch --link selenium-hub:hub -v /dev/shm:/dev/shm selenium/node-chrome:3.141.59-20200409)- Add
export SELENIUM_URL="http://localhost:4444/wd/hub"to your.env - Run your System test!
-
Port forward with
socats(more info needed).
If you encountered any errors that you subsequently resolved, please consider updating this section with your errors and their solutions.
WSL2 and End to End Tests
In order to run Cypress Test Runner, a few extra setup steps are required to run GUIs natively inside of WSL2.
This guide explains how to use graphical user interfaces like Cypress inside WSL2.