Skip to content
This repository has been archived by the owner on May 16, 2019. It is now read-only.

Commit

Permalink
[nanobox] Adjustments for Nanobox development (mastodon#3295)
Browse files Browse the repository at this point in the history
Because Nanobox doesn't run data components in the same container as the code, there are a few tweaks that need to be made in the configuration to get WebPack to work properly in development mode.

The same differences lead to needing to use `DATABASE_URL` by default in the `.env` file for Rails to work correctly.

Limitations of our `.env` loader for Node.js mean the `.env` file needs to be compiled everywhere in order to work, so we compile it in development, now, too. Also, all the `.env.production` tweaks have been consolidated into a single command.

Finally, since Nanobox actually creates the database when it sets up the database server, using the existence of the database alone to determine whether to migrate or setup is insufficient. So we add a condition to `rake db:migrate:setup` to check whether any migrations have run - if the database doesn't exist yet, `db:setup` will be called; if it does, but no migrations have been run, `db:migrate` and `db:seed` are called instead (the same basic idea as what `db:setup` does, but it skips `db:create`, which will only cause problems with an existing DB); otherwise, only `db:migrate` is called.

None of these changes should affect development, and all are designed not to interfere with existing behaviors in other environments.
  • Loading branch information
danhunsaker authored and Gargron committed May 29, 2017
1 parent 402c19a commit 9ead3d1
Show file tree
Hide file tree
Showing 5 changed files with 11 additions and 6 deletions.
2 changes: 2 additions & 0 deletions .env.nanobox
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ DB_NAME=gonano
DB_PASS=$DATA_DB_PASS
DB_PORT=5432

DATABASE_URL=postgresql://$DATA_DB_USER:$DATA_DB_PASS@$DATA_DB_HOST/gonano

# Federation
# Note: Changing LOCAL_DOMAIN or LOCAL_HTTPS at a later time will cause unwanted side effects.
# LOCAL_DOMAIN should *NOT* contain the protocol part of the domain e.g https://example.com.
Expand Down
5 changes: 2 additions & 3 deletions boxfile.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ run.config:
- yarn.lock

extra_steps:
- cp .env.nanobox .env
- envsubst < .env.nanobox > .env
- gem install bundler
- bundle config build.nokogiri --with-iconv-dir=/data/ --with-zlib-dir=/data/
- bundle config build.nokogumbo --with-iconv-dir=/data/ --with-zlib-dir=/data/
Expand All @@ -43,9 +43,8 @@ run.config:
deploy.config:
extra_steps:
- NODE_ENV=production bundle exec rake assets:precompile
- "[ -r /app/.env.production ] || sed 's/LOCAL_HTTPS=.*/LOCAL_HTTPS=true/i' /app/.env.nanobox > /app/.env.production"
transform:
- envsubst < /app/.env.production > /tmp/.env.production && mv /tmp/.env.production /app/.env.production
- "sed 's/LOCAL_HTTPS=.*/LOCAL_HTTPS=true/i' /app/.env.nanobox | envsubst > /app/.env.production"
- |-
if [ -z "$LOCAL_DOMAIN" ]
then
Expand Down
2 changes: 1 addition & 1 deletion config/webpack/configuration.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ const devServer = safeLoad(readFileSync(join(configPath, 'development.server.yml

// Compute public path based on environment and CDN_HOST in production
const ifHasCDN = env.CDN_HOST !== undefined && env.NODE_ENV === 'production';
const devServerUrl = `http://${devServer.host}:${devServer.port}/${paths.entry}/`;
const devServerUrl = `http://${env.LOCAL_DOMAIN || devServer.host}:${devServer.port}/${paths.entry}/`;
const publicUrl = ifHasCDN ? `${env.CDN_HOST}/${paths.entry}/` : `/${paths.entry}/`;
const publicPath = env.NODE_ENV !== 'production' ? devServerUrl : publicUrl;

Expand Down
3 changes: 2 additions & 1 deletion config/webpack/development.server.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
// Note: You must restart bin/webpack-dev-server for changes to take effect

const { resolve } = require('path');
const { env } = require('process');
const merge = require('webpack-merge');
const devConfig = require('./development.js');
const { devServer, publicPath, paths } = require('./configuration.js');

module.exports = merge(devConfig, {
devServer: {
host: devServer.host,
host: env.LOCAL_DOMAIN ? '0.0.0.0' : devServer.host,
port: devServer.port,
headers: { "Access-Control-Allow-Origin": "*" },
compress: true,
Expand Down
5 changes: 4 additions & 1 deletion lib/tasks/db.rake
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,10 @@ namespace :db do
desc 'Setup the db or migrate depending on state of db'
task setup: :environment do
begin
ActiveRecord::Base.connection
if ActiveRecord::Migrator.current_version.zero?
Rake::Task['db:migrate'].invoke
Rake::Task['db:seed'].invoke
end
rescue ActiveRecord::NoDatabaseError
Rake::Task['db:setup'].invoke
else
Expand Down

0 comments on commit 9ead3d1

Please sign in to comment.