What's the equivalent bs-config.js (Browsersync) of this command? - browser-sync

Browsersync is working fine with a PHP/Symfony 3 project with the following command:
browser-sync start --proxy http://localhost:8000 --files "web/css/**/*.css"
The browser will open at http://localhost:3000 and if I change something in web/css I can see the updated stylesheets without a full page reload. So far so good.
However it doesn't work with the following bs-config.js:
module.exports = {
"files": [
"web/css/**/*.css"
],
"server": false,
"proxy": "http://localhost:8000"
};
And the command:
browser-sync start
Browser will not load, changes aren't detected and reloading doesn't work. What I'm missing?

try this:
1º Create "bs-config.js" with: browser-sync init
2º Open file and edit like this:
module.exports = {
"ui": {
"port": 3001,
"weinre": {
"port": 8080
}
},
"files": "web/css/**/*.css",
"watchOptions": {},
"server": false,
"proxy": "http://localhost:8000",
"port": 3000,
"middleware": false,
"serveStatic": [],
"ghostMode": {
"clicks": true,
"scroll": true,
"forms": {
"submit": true,
"inputs": true,
"toggles": true
}
},
"logLevel": "info",
"logPrefix": "BS",
"logConnections": false,
"logFileChanges": true,
"logSnippet": true,
"rewriteRules": [],
"open": "local",
"browser": "default",
"cors": false,
"xip": false,
"hostnameSuffix": false,
"reloadOnRestart": false,
"notify": true,
"scrollProportionally": true,
"scrollThrottle": 0,
"scrollRestoreTechnique": "window.name",
"scrollElements": [],
"scrollElementMapping": [],
"reloadDelay": 0,
"reloadDebounce": 0,
"reloadThrottle": 0,
"plugins": [],
"injectChanges": true,
"startPath": null,
"minify": true,
"host": null,
"localOnly": false,
"codeSync": true,
"timestamps": true,
"clientEvents": [
"scroll",
"scroll:element",
"input:text",
"input:toggles",
"form:submit",
"form:reset",
"click"
],
"socket": {
"socketIoOptions": {
"log": false
},
"socketIoClientConfig": {
"reconnectionAttempts": 50
},
"path": "/browser-sync/socket.io",
"clientPath": "/browser-sync",
"namespace": "/browser-sync",
"clients": {
"heartbeatTimeout": 5000
}
},
"tagNames": {
"less": "link",
"scss": "link",
"css": "link",
"jpg": "img",
"jpeg": "img",
"png": "img",
"svg": "img",
"gif": "img",
"js": "script"
}};
3º Run the server: php -S localhost:8000
4º Start BrowserSync: browser-sync start --config bs-config.js

Related

crossbar authentication with proxy

We are reaching a point that we need to scale crossbar to use multiple cpu cores to improve performance. Because one crossbar worker can only run one realm, the only to scale is to use proxy workers.
I tried to add proxy worker to our crossbar configuration but can't get it working.
The crossbar documentation is very poor. I can only try to figure out how to configure it from the examples the provided here: https://github.com/crossbario/crossbar-examples/tree/master/proxy/.crossbar
So far, I've made my apps successfully registered with crossbar without updating anything on the app side. But when accessing the app from the browser, there is also a direct websocket call from the browser, which is not working. Inspecting on the browser shows error explicit role <None> on realm <realm1> configured for dynamic authenticator does not exist. I think it's probably related to the dynamic authentication.
Here's my original configuration with one worker and my updated configuration with one worker and one proxy.
original config with one worker:
{
"controller": {},
"version": 2,
"workers": [
{
"realms": [
{
"name": "realm1",
"roles": [
{
"name": "backend",
"permissions": [
{
"allow": {
"call": true,
"publish": true,
"register": true,
"subscribe": true
},
"cache": false,
"disclose": {
"caller": true,
"publisher": true
},
"match": "prefix",
"uri": ""
}
]
},
{
"name": "authenticated",
"permissions": [
{
"allow": {
"call": false,
"publish": false,
"register": false,
"subscribe": true
},
"cache": false,
"disclose": {
"caller": true,
"publisher": true
},
"match": "prefix",
"uri": "organisation.file.provision"
},
{
"allow": {
"call": false,
"publish": false,
"register": false,
"subscribe": true
},
"cache": false,
"disclose": {
"caller": true,
"publisher": true
},
"match": "prefix",
"uri": "organisation.notifications.updates"
},
{
"allow": {
"call": true,
"publish": false,
"register": false,
"subscribe": false
},
"cache": false,
"disclose": {
"caller": true,
"publisher": true
},
"match": "prefix",
"uri": "organisation.model"
},
{
"allow": {
"call": true,
"publish": true,
"register": false,
"subscribe": true
},
"cache": false,
"disclose": {
"caller": true,
"publisher": true
},
"match": "prefix",
"uri": "public."
}
]
},
{
"name": "anonymous",
"permissions": [
{
"allow": {
"call": true,
"publish": false,
"register": false,
"subscribe": false
},
"cache": true,
"disclose": {
"caller": true,
"publisher": true
},
"match": "exact",
"uri": "organisation.app.meta"
},
{
"allow": {
"call": true,
"publish": false,
"register": false,
"subscribe": false
},
"cache": false,
"disclose": {
"caller": true,
"publisher": true
},
"match": "prefix",
"uri": "anon."
}
]
}
]
}
],
"transports": [
{
"endpoint": {
"port": 8080,
"type": "tcp"
},
"options": {
"access_log": true,
"hsts": true
},
"paths": {
"/": {
"directory": "../web",
"type": "static"
},
"ws": {
"auth": {
"anonymous": {
"role": "anonymous",
"type": "static"
},
"ticket": {
"authenticator": "organisation.auth.authenticate",
"type": "dynamic"
},
"wampcra": {
"type": "static",
"users": {
"1": {
"role": "backend",
"secret": "********"
},
"monitor": {
"role": "devops",
"secret": "******"
}
}
}
},
"debug": false,
"options": {
"auto_fragment_size": 65536,
"auto_ping_interval": 10000,
"auto_ping_size": 4,
"auto_ping_timeout": 5000,
"close_handshake_timeout": 1000,
"echo_close_codereason": true,
"enable_webstatus": false,
"fail_by_drop": true,
"max_frame_size": 1048576,
"max_message_size": 1048576,
"open_handshake_timeout": 2500
},
"type": "websocket"
}
},
"type": "web"
}
],
"type": "router"
}
]
}
one worker and one proxy:
{
"controller": {},
"version": 2,
"workers": [
{
"realms": [
{
"name": "realm1",
"roles": [
{
"name": "backend",
"permissions": [
{
"allow": {
"call": true,
"publish": true,
"register": true,
"subscribe": true
},
"cache": true,
"disclose": {
"caller": true,
"publisher": true
},
"match": "prefix",
"uri": ""
}
]
},
{
"name": "authenticated",
"permissions": [
{
"allow": {
"call": false,
"publish": false,
"register": false,
"subscribe": true
},
"cache": false,
"disclose": {
"caller": true,
"publisher": true
},
"match": "prefix",
"uri": "organisation.file.provision"
},
{
"allow": {
"call": false,
"publish": false,
"register": false,
"subscribe": true
},
"cache": false,
"disclose": {
"caller": true,
"publisher": true
},
"match": "prefix",
"uri": "organisation.notifications.updates"
},
{
"allow": {
"call": true,
"publish": false,
"register": false,
"subscribe": false
},
"cache": false,
"disclose": {
"caller": true,
"publisher": true
},
"match": "prefix",
"uri": "organisation.model"
},
{
"allow": {
"call": true,
"publish": true,
"register": false,
"subscribe": true
},
"cache": false,
"disclose": {
"caller": true,
"publisher": true
},
"match": "prefix",
"uri": "public."
}
]
},
{
"name": "anonymous",
"permissions": [
{
"allow": {
"call": true,
"publish": false,
"register": false,
"subscribe": false
},
"cache": true,
"disclose": {
"caller": true,
"publisher": true
},
"match": "exact",
"uri": "organisation.app.meta"
},
{
"allow": {
"call": true,
"publish": false,
"register": false,
"subscribe": false
},
"cache": false,
"disclose": {
"caller": true,
"publisher": true
},
"match": "prefix",
"uri": "anon."
}
]
}
]
}
],
"transports": [
{
"serializer": "cbor",
"type": "rawsocket"
"endpoint": {
"type": "unix",
"path": "router.sock"
},
"options": {
"access_log": true,
"hsts": true
},
"auth": {
"cryptosign-proxy": {
"type": "dynamic",
"authenticator": "organisation.auth.authenticate"
},
"options": {
"max_message_size": 1048576
},
}
],
"type": "router"
},
{
"type": "proxy",
"connections": {
"conn1": {
"transport": {
"type": "rawsocket",
"endpoint": {
"type": "unix",
"path": "router.sock"
},
"url": "ws://localhost",
"serializer": "cbor"
}
},
"auth": {
"cryptosign-proxy": {
"type": "static"
}
}
},
"routes": {
"realm1": {
"anonymous": "conn1",
"backend": "conn1",
"authenticated": "conn1"
}
},
"transports": [
{
"type": "web",
"endpoint": {
"port": 8080,
"type": "tcp",
"shared": true,
"backlog": 1024
},
"options": {
"access_log": true,
"hsts": true
},
"paths": {
"/": {
"directory": "../web",
"type": "static"
},
"ws": {
"auth": {
"anonymous": {
"role": "anonymous",
"type": "static"
},
"ticket": {
"authenticator": "organisation.auth.authenticate",
"type": "dynamic"
},
"wampcra": {
"type": "static",
"users": {
"1": {
"role": "backend",
"secret": "*******n"
},
"monitor": {
"role": "devops",
"secret": "*****"
}
}
}
},
"debug": false,
"options": {
"auto_fragment_size": 65536,
"auto_ping_interval": 10000,
"auto_ping_size": 13,
"auto_ping_timeout": 5000,
"close_handshake_timeout": 1000,
"echo_close_codereason": true,
"enable_webstatus": false,
"fail_by_drop": true,
"max_frame_size": 1048576,
"max_message_size": 1048576,
"open_handshake_timeout": 2500
},
"type": "websocket"
},
"info": {
"type": "nodeinfo"
}
},
}
]
}
]
}

"describe is not defined" when using Jest with a Node.JS server app

I have a relatively simple Node.js application in which I'm trying to use Jest for my unit tests (since I use it on my other client project and would like the consistency of using it here). To try to get to the bottom of it, I have tried to create a stripped-down project with the bare minimum to reproduce the problem.
My package.json is here:
{
"name": "jest-sample",
"version": "0.2.0",
"private": true,
"description": "NodeJS backend to the Service Manager UI",
"author": "Me",
"license": "SEE LICENSE IN LICENSE",
"deprecated": false,
"main": "src/js/app.js",
"type": "module",
"engines": {
"node": "^8.15.1"
},
"scripts": {
"test": "npx jest"
},
"devDependencies": {
"jest": "26.0.1",
"supertest": "4.0.2"
},
"jest": {
"testEnvironment": "node"
}
}
I don't have eslint or anything else in the project.
➜ jest-sample ls -a
. .. __tests__ node_modules package-lock.json package.json
The test is also simple:
describe('Sample Test', function() {
it('should be', function() {
expect(true).toBe(true);
})
});
Yet, when I run jest, I get:
➜ jest-sample npx jest
FAIL __tests__/sample.spec.js
● Test suite failed to run
ReferenceError: describe is not defined
> 1 | describe('Sample Test', function() {
| ^
2 | it('should be', function() {
3 | expect(true).toBe(true);
4 | })
at Object.<anonymous> (__tests__/sample.spec.js:1:1)
Test Suites: 1 failed, 1 total
Tests: 0 total
Snapshots: 0 total
Time: 2.562 s
Ran all test suites.
UPDATE:
The output of jest-debug is below:
➜ jest-sample npx jest --debug
{
"configs": [
{
"automock": false,
"cache": true,
"cacheDirectory": "/private/var/folders/4m/6tytrddj3g90b8rmbrccw3lm0000gn/T/jest_dx",
"clearMocks": false,
"coveragePathIgnorePatterns": [
"/node_modules/"
],
"cwd": "/Users/rbair/Projects/gitlab/iot/infrastructure/service-manager/jest-sample",
"detectLeaks": false,
"detectOpenHandles": false,
"errorOnDeprecated": false,
"extraGlobals": [],
"forceCoverageMatch": [],
"globals": {},
"haste": {
"computeSha1": false,
"throwOnModuleCollision": false
},
"moduleDirectories": [
"node_modules"
],
"moduleFileExtensions": [
"js",
"json",
"jsx",
"ts",
"tsx",
"node"
],
"moduleNameMapper": [],
"modulePathIgnorePatterns": [],
"name": "d652708218018aa212b40c53d7999ccc",
"prettierPath": "prettier",
"resetMocks": false,
"resetModules": false,
"restoreMocks": false,
"rootDir": "/Users/rbair/Projects/gitlab/iot/infrastructure/service-manager/jest-sample",
"roots": [
"/Users/rbair/Projects/gitlab/iot/infrastructure/service-manager/jest-sample"
],
"runner": "jest-runner",
"setupFiles": [],
"setupFilesAfterEnv": [],
"skipFilter": false,
"snapshotSerializers": [],
"testEnvironment": "/Users/rbair/Projects/gitlab/iot/infrastructure/service-manager/jest-sample/node_modules/jest-environment-node/build/index.js",
"testEnvironmentOptions": {},
"testLocationInResults": false,
"testMatch": [
"**/__tests__/**/*.[jt]s?(x)",
"**/?(*.)+(spec|test).[tj]s?(x)"
],
"testPathIgnorePatterns": [
"/node_modules/"
],
"testRegex": [],
"testRunner": "/Users/rbair/Projects/gitlab/iot/infrastructure/service-manager/jest-sample/node_modules/jest-jasmine2/build/index.js",
"testURL": "http://localhost",
"timers": "real",
"transform": [
[
"^.+\\.[jt]sx?$",
"/Users/rbair/Projects/gitlab/iot/infrastructure/service-manager/jest-sample/node_modules/babel-jest/build/index.js",
{}
]
],
"transformIgnorePatterns": [
"/node_modules/"
],
"watchPathIgnorePatterns": []
}
],
"globalConfig": {
"bail": 0,
"changedFilesWithAncestor": false,
"collectCoverage": false,
"collectCoverageFrom": [],
"coverageDirectory": "/Users/rbair/Projects/gitlab/iot/infrastructure/service-manager/jest-sample/coverage",
"coverageProvider": "babel",
"coverageReporters": [
"json",
"text",
"lcov",
"clover"
],
"detectLeaks": false,
"detectOpenHandles": false,
"errorOnDeprecated": false,
"expand": false,
"findRelatedTests": false,
"forceExit": false,
"json": false,
"lastCommit": false,
"listTests": false,
"logHeapUsage": false,
"maxConcurrency": 5,
"maxWorkers": 3,
"noStackTrace": false,
"nonFlagArgs": [],
"notify": false,
"notifyMode": "failure-change",
"onlyChanged": false,
"onlyFailures": false,
"passWithNoTests": false,
"projects": [],
"rootDir": "/Users/rbair/Projects/gitlab/iot/infrastructure/service-manager/jest-sample",
"runTestsByPath": false,
"skipFilter": false,
"testFailureExitCode": 1,
"testPathPattern": "",
"testSequencer": "/Users/rbair/Projects/gitlab/iot/infrastructure/service-manager/jest-sample/node_modules/#jest/test-sequencer/build/index.js",
"updateSnapshot": "new",
"useStderr": false,
"watch": false,
"watchAll": false,
"watchman": true
},
"version": "26.0.1"
}
FAIL __tests__/sample.spec.js
● Test suite failed to run
ReferenceError: describe is not defined
> 1 | describe('Sample Test', function() {
| ^
2 | it('should be', function() {
3 | expect(true).toBe(true);
4 | })
at Object.<anonymous> (__tests__/sample.spec.js:1:1)
Test Suites: 1 failed, 1 total
Tests: 0 total
Snapshots: 0 total
Time: 0.523 s
Ran all test suites.
As discovered by #jonrsharpe, my underlying problem was the version of Node I was using (10.13.0). By updating to version 12.18.0, the issue went away.

Incorrect version of jest trying to run jest

I have jest tests in my angular project.
I have a package.json file specifying the version of jest I would like to use to run the test. The file includes:
"#types/jest": "^24.0.18",
"jest": "^24.9.0",
"jest-preset-angular": "^7.1.1",
The jest config also includes:
"setupFilesAfterEnv": [
"<rootDir>/setup-jest.ts"
],
This is where the issue occurs. When trying to run jest, I get the following message:
● Validation Warning:
Unknown option "setupFilesAfterEnv" with value ["<rootDir>/setup-jest.ts"] was found.
This is probably a typing mistake. Fixing it will remove this message.
Configuration Documentation:
https://jestjs.io/docs/configuration.html
I had a look at jest -h and found a flag which gives me the setup of the jest environment.
jest --showConfig
This however shows that I am running jest on version
"version": "23.6.0"
So my question lies here. How come after I do an npm i, the jest version trying to run the tests is different / old.
I tried installing jest-cli with the -g flag and the save-dev flag.
Also trying to run tests in VS Code, if thats any help.
Please help.
Thank you in advance.
Full log of npx jest --showConfig
● Validation Warning:
Unknown option "setupFilesAfterEnv" with value ["<rootDir>/setup-jest.ts"] was found.
This is probably a typing mistake. Fixing it will remove this message.
Configuration Documentation:
https://jestjs.io/docs/configuration.html
{
"configs": [
{
"automock": false,
"browser": false,
"cache": true,
"cacheDirectory": "/var/folders/bs/wrvrgl6132df8l5ndxv40m3m0000gn/T/jest_dx",
"clearMocks": false,
"coveragePathIgnorePatterns": [
"/node_modules/",
"setup-jest.ts"
],
"detectLeaks": false,
"detectOpenHandles": false,
"errorOnDeprecated": false,
"filter": null,
"forceCoverageMatch": [],
"globals": {
"ts-jest": {
"tsConfig": "<rootDir>/tsconfig.spec.json",
"stringifyContentPathRegex": "\\.html$",
"astTransformers": [
"jest-preset-angular/InlineHtmlStripStylesTransformer"
]
}
},
"haste": {
"providesModuleNodeModules": []
},
"moduleDirectories": [
"node_modules"
],
"moduleFileExtensions": [
"ts",
"html",
"js",
"json"
],
"moduleNameMapper": [
[
"#app/(.*)",
"/Users/name/Projects/project/src/app/$1"
],
...
],
"modulePathIgnorePatterns": [],
"name": "6caa4...",
"prettierPath": "/Users/name/Projects/project/node_modules/prettier/index.js",
"resetMocks": false,
"resetModules": false,
"resolver": null,
"restoreMocks": false,
"rootDir": "/Users/name/Projects/project",
"roots": [
"/Users/name/Projects/project"
],
"runner": "jest-runner",
"setupFiles": [],
"setupTestFrameworkScriptFile": null,
"skipFilter": false,
"snapshotSerializers": [],
"testEnvironment": "/Users/name/Projects/project/node_modules/jest-environment-jsdom-thirteen/build/index.js",
"testEnvironmentOptions": {},
"testLocationInResults": false,
"testMatch": [
"**/__tests__/**/*.js?(x)",
"**/?(*.)+(spec|test).js?(x)"
],
"testRegex": "",
"testRunner": "/Users/name/node_modules/jest-jasmine2/build/index.js",
"testURL": "http://localhost",
"timers": "real",
"transform": [
[
"^.+\\.(ts|js|html)$",
"/Users/name/Projects/project/node_modules/ts-jest/dist/index.js"
]
],
"watchPathIgnorePatterns": []
}
],
"globalConfig": {
"bail": false,
"changedFilesWithAncestor": false,
"collectCoverage": true,
"collectCoverageFrom": null,
"coverageDirectory": "/Users/name/Projects/project/coverage",
"coverageReporters": [
"json",
"text",
"lcov",
"clover"
],
"coverageThreshold": null,
"detectLeaks": false,
"detectOpenHandles": false,
"errorOnDeprecated": false,
"expand": false,
"filter": null,
"globalSetup": null,
"globalTeardown": null,
"listTests": false,
"maxWorkers": 7,
"noStackTrace": false,
"nonFlagArgs": [],
"notify": false,
"notifyMode": "always",
"passWithNoTests": false,
"projects": null,
"rootDir": "/Users/name/Projects/project",
"runTestsByPath": false,
"skipFilter": false,
"testFailureExitCode": 1,
"testPathPattern": "",
"testResultsProcessor": null,
"updateSnapshot": "new",
"useStderr": false,
"verbose": null,
"watch": false,
"watchman": true
},
"version": "23.6.0"
}
Showing npm config get log here too:
; cli configs
metrics-registry = "http://.../.../npm-group/"
scope = ""
user-agent = "npm/6.9.0 node/v10.15.3 darwin x64"
; project config /Users/user/Projects/project/.npmrc
registry = "http://.../.../npm-group/"
; node bin location = /Users/user/.nvm/versions/node/v10.15.3/bin/node
; cwd = /Users/user/Projects/project
; HOME = /Users/user
; "npm config ls -l" to show all defaults.
I had the same issue, after a long search I've tried this:
type jest
Which gave me the location:
/usr/local/bin/jest
Renaming this file (or deleting it), solved the problem (note that now running jest will give command not found).

Why didn't docker copy files to the mounted directory?

I have a problem with mounting in Docker. I want simply save and return pictures to front-end.
This is a dockerfile:
FROM node:boron
WORKDIR /app
COPY . .
RUN npm install --production
RUN mkdir -p /app/public
VOLUME ["/app/public"]
CMD yum install imagemagick
# if we don't use this specific form, SIGINT/SIGTERM doesn't get forwarded
CMD node server.js
I'm deploying with skyliner.io.
Inspecting my image I get :
[
{
"Id": "sha256:598085445f82a8324f41842a7ac4f93a55b009d93bfaf07e7ce7b8a4bc5918d9",
"RepoTags": [
"thurst-back-end:latest"
],
"RepoDigests": [],
"Parent": "",
"Comment": "",
"Created": "2017-01-09T16:05:50.958866532Z",
"Container": "85457fb45353305715ea72297187fd6b88a019aa369426428c536a6a80450206",
"ContainerConfig": {
"Hostname": "45f28166fed1",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"NPM_CONFIG_LOGLEVEL=info",
"NODE_VERSION=6.9.4"
],
"Cmd": [
"/bin/sh",
"-c",
"#(nop) CMD [\"/bin/sh\" \"-c\" \"node server.js\"]"
],
"ArgsEscaped": true,
"Image": "sha256:64249ddf0e9111ef191b1fb02d1af3ae2c7735f0509169a8e5fa6bc980a463ba",
"Volumes": {
"/app/public": {}
},
"WorkingDir": "/app",
"Entrypoint": null,
"OnBuild": [],
"Labels": {}
},
"DockerVersion": "1.11.2",
"Author": "",
"Config": {
"Hostname": "45f28166fed1",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"NPM_CONFIG_LOGLEVEL=info",
"NODE_VERSION=6.9.4"
],
"Cmd": [
"/bin/sh",
"-c",
"node server.js"
],
"ArgsEscaped": true,
"Image": "sha256:64249ddf0e9111ef191b1fb02d1af3ae2c7735f0509169a8e5fa6bc980a463ba",
"Volumes": {
"/app/public": {}
},
"WorkingDir": "/app",
"Entrypoint": null,
"OnBuild": [],
"Labels": {}
},
"Architecture": "amd64",
"Os": "linux",
"Size": 700375224,
"VirtualSize": 700375224,
"GraphDriver": {
"Name": "overlay",
"Data": {
"RootDir": "/var/lib/docker/overlay/739c2f7ee799c2ec0e75beb02c24c084aa9545fa6f1680b6a65062bf5d6133e8/root"
}
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:b6ca02dfe5e62c58dacb1dec16eb42ed35761c15562485f9da9364bb7c90b9b3",
"sha256:60a0858edcd5aad240966e33389850e4328de4cfb5282977eddda56bffc7f95f",
"sha256:53c779688d06353f7ba4fd7ce1d43ce146ad0278ebead0feea1846383c730024",
"sha256:0a5e2b2ddeaa749d95730bad9be3e3a472ff6f80544da0082a99ba569df34ff3",
"sha256:fa18e5ffd316beb0c4c929ea1fff8d559a73a366f30f1004bb06af3e9f800696",
"sha256:604c78617f347c58e4ce0021f47928b7df3d799ea7c5e9367fa5a800e473dc06",
"sha256:6a73c39a0ab65b5e2da69b9013fc7f50c8bf5be27c0cf5fb3b642a247a8993ca",
"sha256:b7ce32b271bee3f3c614232448a4308cdfc4a2bf6f8db1436f51cb74ae5c15dc",
"sha256:a276062d9f56b85bf34797301d74b761970c3e6ce0ccd3525f4535e675a0974e",
"sha256:2f616e13f894a3a5c4dc33cbbcce345c51a704d56a70396cacdfb2e96e2ff9df",
"sha256:c6dfd7a877dba2837cc46e906cde9aa6e1cc5f89c9c65cefa81f130d59e2c7ac"
]
}
}
]
Next command to understand problem:
$ docker volume ls
DRIVER VOLUME NAME
local 2fe327f9a9d82d7ddad72e8d9dcda76e3212653e100c24453de9edbbf60fbe53
AND also
$ docker volume inspect 2fe327f9a9d82d7ddad72e8d9dcda76e3212653e100c24453de9edbbf60fbe53
[
{
"Name": "2fe327f9a9d82d7ddad72e8d9dcda76e3212653e100c24453de9edbbf60fbe53",
"Driver": "local",
"Mountpoint": "/var/lib/docker/volumes/2fe327f9a9d82d7ddad72e8d9dcda76e3212653e100c24453de9edbbf60fbe53/_data",
"Labels": null
}
]
When I run project not in container - all work good, files saves to /public/images/:id/:id-user.jpg.
But when I run project in docker, files are located in /var/lib/docker/overlay/0a2bdfae85072dce01e470eb71f1199ab23d90eb6f9e573d6a65e06d3d387cce/upper/app/public/images.
No sure I understand it correct, but could it be because your app writes to a path /public?
You say when you run not in container, you get /public/images/..., but your volume is /app/public, which is another path, and hence you write into you container volume..

SublimeLinter ignore missing semicolons

I'm using a non-semicolon based coding style in one of my node apps, but the problem is SublimeLinter is logging all the missing semicolons, and eventually stops with a "Too many errors" error, and stops linting the rest of the script.
I've tried adding an ignore_match object to both the default and user settings, but nothing works. I've also restarted after each time I've tried just to make sure.
I've even tried adding it to the excludes portion of the settings.
This is the resource I was using:
Linter Settings
Here is one of the errors I'm getting:
Z:\www\site\node\workers.js: line 162, col 2, Missing semicolon. (W033)
Here's my settings: From User.
{
"user": {
"debug": true,
"delay": 0.25,
"error_color": "D02000",
"gutter_theme": "Packages/SublimeLinter/gutter-themes/Default/Default.gutter-theme",
"gutter_theme_excludes": [],
"ignore_match": [
"Missing semicolon."
],
"lint_mode": "background",
"linters": {
"annotations": {
"#disable": false,
"args": [],
"errors": [
"FIXME"
],
"excludes": ["Missing semicolon"],
"warnings": [
"TODO",
"README"
]
},
"jshint": {
"#disable": false,
"args": [],
"excludes": ["Missing semicolon"]
},
"php": {
"#disable": false,
"args": [],
"excludes": []
}
},
"mark_style": "outline",
"no_column_highlights_line": false,
"passive_warnings": false,
"paths": {
"linux": [],
"osx": [],
"windows": []
},
"python_paths": {
"linux": [],
"osx": [],
"windows": []
},
"rc_search_limit": 3,
"shell_timeout": 10,
"show_errors_on_save": false,
"show_marks_in_minimap": true,
"syntax_map": {
"html (django)": "html",
"html (rails)": "html",
"html 5": "html",
"php": "html",
"python django": "python"
},
"warning_color": "DDB700",
"wrap_find": true
}
}
EDIT:
Added ignore_match": ["Missing semicolon"] to the jshint options. It became:
"jshint": {
"#disable": false,
"args": [],
"excludes": [],
"ignore_match": ["Missing semicolon"]
},
Complete answer,
Full user settings json file:
{
"user": {
"linters": {
"jshint": {
"#disable": false,
"ignore_match": [
".*Missing.*",
]
},
}
}
}
Easy answer:
Add ignore_match": ["Missing semicolon"] to jshint options.
"jshint": {
"#disable": false,
"args": [],
"excludes": [],
"ignore_match": ["Missing semicolon"]
},

Resources