Browse Source

Merge pull request #1728 from nocodb/develop

0.90.1 Pre-release
pull/1729/head 0.90.1
աɨռɢӄաօռɢ 2 years ago committed by GitHub
parent
commit
fd1392f00a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 8
      README.md
  2. 42
      packages/nc-gui/components/ProjectTreeView.vue
  3. 115
      packages/nc-gui/components/project/spreadsheet/components/extras.vue
  4. 3
      packages/nc-gui/mixins/device.js
  5. 2
      packages/noco-docs-prev/content/en/setup-and-usages/dashboard.md
  6. 8
      packages/noco-docs/content/en/getting-started/installation.md
  7. 3
      packages/nocodb/src/lib/dataMapper/lib/sql/BaseModelSqlv2.ts
  8. 26
      packages/nocodb/src/lib/dataMapper/lib/sql/CustomKnex.ts
  9. 14
      packages/nocodb/src/lib/dataMapper/lib/sql/conditionV2.ts
  10. 1
      packages/nocodb/src/lib/noco-models/Filter.ts
  11. 2
      packages/nocodb/src/lib/noco/upgrader/NcUpgrader.ts
  12. 11
      packages/nocodb/src/lib/utils/projectAcl.ts
  13. 2
      scripts/markdown/readme/languages/chinese.md
  14. 2
      scripts/markdown/readme/languages/dutch.md
  15. 2
      scripts/markdown/readme/languages/french.md
  16. 2
      scripts/markdown/readme/languages/german.md
  17. 2
      scripts/markdown/readme/languages/indonesian.md
  18. 2
      scripts/markdown/readme/languages/italian.md
  19. 2
      scripts/markdown/readme/languages/japanese.md
  20. 2
      scripts/markdown/readme/languages/korean.md
  21. 2
      scripts/markdown/readme/languages/portuguese.md
  22. 2
      scripts/markdown/readme/languages/russian.md
  23. 2
      scripts/markdown/readme/languages/spanish.md

8
README.md

@ -93,13 +93,13 @@ npm start
```bash
# for SQLite
docker run -d --name nocodb \
-v /local/path:/usr/app/data/ \
-v "$(pwd)"/nocodb:/usr/app/data/ \
-p 8080:8080 \
nocodb/nocodb:latest
# for MySQL
docker run -d --name nocodb-mysql \
-v /local/path:/usr/app/data/ \
-v "$(pwd)"/nocodb:/usr/app/data/ \
-p 8080:8080 \
-e NC_DB="mysql2://host.docker.internal:3306?u=root&p=password&d=d1" \
-e NC_AUTH_JWT_SECRET="569a1821-0a93-45e8-87ab-eb857f20a010" \
@ -107,7 +107,7 @@ nocodb/nocodb:latest
# for PostgreSQL
docker run -d --name nocodb-postgres \
-v /local/path:/usr/app/data/ \
-v "$(pwd)"/nocodb:/usr/app/data/ \
-p 8080:8080 \
-e NC_DB="pg://host.docker.internal:5432?u=root&p=password&d=d1" \
-e NC_AUTH_JWT_SECRET="569a1821-0a93-45e8-87ab-eb857f20a010" \
@ -115,7 +115,7 @@ nocodb/nocodb:latest
# for MSSQL
docker run -d --name nocodb-mssql \
-v /local/path:/usr/app/data/ \
-v "$(pwd)"/nocodb:/usr/app/data/ \
-p 8080:8080 \
-e NC_DB="mssql://host.docker.internal:1433?u=root&p=password&d=d1" \
-e NC_AUTH_JWT_SECRET="569a1821-0a93-45e8-87ab-eb857f20a010" \

42
packages/nc-gui/components/ProjectTreeView.vue

@ -580,7 +580,7 @@
<template v-if="_isUIAllowed('settings')">
<v-divider />
<div class="py-3 pl-5 pr-3 d-flex align-center">
<div class="pt-3 pl-5 pr-3 d-flex align-center pb-2">
<settings-modal>
<template #default="{click}">
<div v-t="['project-settings']" class="caption pointer nc-team-settings" @click="click">
@ -593,6 +593,17 @@
</settings-modal>
</div>
</template>
<div
v-t="['api-docs']"
class="caption pointer nc-docs pb-3 pl-5 pr-3 pt-2 d-flex align-center"
@click="openLink('https://apis.nocodb.com')"
>
<v-icon small class="mr-2">
mdi-api
</v-icon>
API Docs
</div>
<v-divider />
<extras class="pl-1 " />
</div>
@ -610,7 +621,6 @@
@create="mtdViewCreate($event)"
/>
<textDlgSubmitCancel
v-if="dialogRenameTable.dialogShow"
:rules="[validateTableName, validateUniqueAlias]"
@ -663,7 +673,7 @@
<script>
/* eslint-disable */
import { mapMutations, mapGetters, mapActions } from 'vuex'
import {mapMutations, mapGetters, mapActions} from 'vuex'
import rightClickOptions from '../helpers/rightClickOptions'
import rightClickOptionsSub from '../helpers/rightClickOptionsSub'
@ -671,11 +681,11 @@ import icons from '../helpers/treeViewIcons'
import textDlgSubmitCancel from './utils/dlgTextSubmitCancel'
import dlgLabelSubmitCancel from './utils/dlgLabelSubmitCancel'
import { copyTextToClipboard } from '../helpers/xutils'
import {copyTextToClipboard} from '../helpers/xutils'
import DlgTableCreate from '@/components/utils/dlgTableCreate'
import DlgViewCreate from '@/components/utils/dlgViewCreate'
import SponsorMini from '@/components/sponsorMini'
import { validateTableName } from '~/helpers'
import {validateTableName} from '~/helpers'
import ExcelImport from '~/components/import/excelImport'
import draggable from 'vuedraggable'
@ -717,7 +727,7 @@ export default {
viewer: 'mdi-eye-outline',
commenter: 'mdi-comment-account-outline',
},
rolesList: [{ title: 'editor' }, { title: 'commenter' }, { title: 'viewer' }],
rolesList: [{title: 'editor'}, {title: 'commenter'}, {title: 'viewer'}],
showSqlClient: false,
nestedMenu: {},
overShieldIcon: false,
@ -745,7 +755,7 @@ export default {
x: 0,
y: 0,
menuItem: null,
menu: [{ title: 'Execute' }],
menu: [{title: 'Execute'}],
icons,
tree: [],
active: [],
@ -912,7 +922,7 @@ export default {
name: 'App Store',
key: `appStore`
}
item._nodes = { env: '_noco' }
item._nodes = {env: '_noco'}
item._nodes.type = 'appStore'
this.$store.dispatch('tabs/ActAddTab', item)
}
@ -950,7 +960,7 @@ export default {
name: `${this.$t('title.team&auth')} `,
key: `roles`
}
item._nodes = { env: '_noco' }
item._nodes = {env: '_noco'}
item._nodes.type = 'roles'
this.$store.dispatch('tabs/ActAddTab', item)
}
@ -964,7 +974,7 @@ export default {
name: `${this.$t('title.metaMgmt')}`,
key: `disableOrEnableModel`
}
item._nodes = { env: '_noco' }
item._nodes = {env: '_noco'}
item._nodes.type = 'disableOrEnableModel'
this.$store.dispatch('tabs/ActAddTab', item)
}
@ -1101,7 +1111,7 @@ export default {
}
if (item._nodes.type === 'table') {
let tableIndex = +item._nodes.key.split('.').pop()
if (!(await this.$store.dispatch('windows/ActCheckMaxTable', { tableIndex }))) {
if (!(await this.$store.dispatch('windows/ActCheckMaxTable', {tableIndex}))) {
return
}
}
@ -1175,9 +1185,9 @@ export default {
if (!this.isTreeView) {
if (this.$route.query.type) {
const node = this.listViewArr.find(n => n.type === `${this.$route.query.type}Dir`)
await this.addTab({ ...(node || this.listViewArr[0]) }, false, true)
await this.addTab({...(node || this.listViewArr[0])}, false, true)
} else {
await this.addTab({ ...this.listViewArr[0] }, false, true)
await this.addTab({...this.listViewArr[0]}, false, true)
}
}
} catch (error) {
@ -1344,7 +1354,7 @@ export default {
dbAlias: item._nodes.dbAlias,
},
func,
{ tn: item.name },
{tn: item.name},
])
if (result && result.data) {
copyTextToClipboard(result.data, 'selection')
@ -1352,7 +1362,7 @@ export default {
copyTextToClipboard('Example String', 'selection')
}
let sqlClientNode = { ...item._nodes }
let sqlClientNode = {...item._nodes}
let newItem = {
_nodes: sqlClientNode,
}
@ -1652,7 +1662,7 @@ export default {
dbAlias: item._nodes.dbAlias,
},
'viewRead',
{ view_name: item._nodes.view_name },
{view_name: item._nodes.view_name},
])
await this.$store.dispatch('sqlMgr/ActSqlOpPlus', [

115
packages/nc-gui/components/project/spreadsheet/components/extras.vue

@ -19,6 +19,7 @@
<v-list
width="100%"
class="
py-0
flex-shrink-1
text-left
elevation-0
@ -29,65 +30,86 @@
:class="{ active: true }"
dense
>
<v-list-item dense href="https://discord.gg/5RgZmkW" target="_blank">
<!-- Join Discord -->
<v-list-item>
<div class="d-flex justify-space-between d-100 pr-2">
<v-icon v-t="['community:discord']" class="mr-1" size="22" :color="textColors[0]" @click="open('https://discord.gg/5RgZmkW')">
mdi-discord
</v-icon>
<v-icon v-t="['community:discourse']" class="mr-1 discourse" size="22" :color="textColors[0]" @click="open('https://community.nocodb.com/')">
mdi-discourse
</v-icon>
<v-icon v-t="['community:discord']" class="mr-1" size="22" color="#ff4600" @click="open('https://www.reddit.com/r/NocoDB/')">
mdi-reddit
</v-icon>
<v-icon v-t="['community:twitter']" class="mr-1" size="22" :color="textColors[1]" @click="open('https://twitter.com/NocoDB')">
mdi-twitter
</v-icon>
<v-icon v-t="['community:book-demo']" class="mr-1" size="22" :color="textColors[3]" @click="open('https://calendly.com/nocodb-meeting')">
mdi-calendar-month
</v-icon>
</div>
</v-list-item>
<!-- <v-list-item dense href="https://discord.gg/5RgZmkW" target="_blank">
&lt;!&ndash; Join Discord &ndash;&gt;
<v-list-item-title>
<v-icon class="mr-1" small :color="textColors[0]">
mdi-discord
</v-icon>
<span class="caption" :title="$t('labels.community.joinDiscord')" v-t="['community:discord']">{{
<span v-t="['community:discord']" class="caption" :title="$t('labels.community.joinDiscord')">{{
$t('labels.community.joinDiscord')
}}</span>
</v-list-item-title>
</v-list-item>
<!-- Join Community -->
&lt;!&ndash; Join Community &ndash;&gt;
<v-list-item dense href="https://community.nocodb.com/" target="_blank">
<v-list-item-title>
<v-icon class="mr-1 discourse" small :color="textColors[0]">
mdi-discourse
</v-icon>
<span class="caption" :title="$t('labels.community.joinCommunity')" v-t="['community:discourse']">{{
$t('labels.community.joinCommunity')
}}</span>
</v-list-item-title>
</v-list-item>
<v-icon class="mr-1 discourse" small :color="textColors[0]">
mdi-discourse
</v-icon>
<span v-t="['community:discourse']" class="caption" :title="$t('labels.community.joinCommunity')">{{
$t('labels.community.joinCommunity')
}}</span>
</v-list-item-title>
</v-list-item>
<v-divider />
<v-list-item dense href="https://twitter.com/NocoDB" target="_blank">
<!-- Join Reddit -->
<v-list-item-title>
<v-icon class="mr-1" small color="#ff4600">
mdi-reddit
</v-icon>
<span class="caption" :title="$t('labels.community.joinReddit')" v-t="['community:reddit']">{{
$t('labels.community.joinReddit')
}}</span>
</v-list-item-title>
</v-list-item>
<v-list-item
dense
target="_blank"
href="https://calendly.com/nocodb-meeting"
>
<!-- Follow NocoDB -->
&lt;!&ndash; Join Reddit &ndash;&gt;
<v-list-item-title>
<v-icon class="mr-1" small color="#ff4600">
mdi-reddit
</v-icon>
<span class="caption" :title="$t('labels.community.joinReddit')" v-t="['community:reddit']">{{
$t('labels.community.joinReddit')
}}</span>
</v-list-item-title>
</v-list-item>
<v-list-item
dense
target="_blank"
href="https://calendly.com/nocodb-meeting"
>
&lt;!&ndash; Follow NocoDB &ndash;&gt;
<v-list-item-title>
<v-icon class="mr-1" small :color="textColors[1]">
mdi-twitter
</v-icon>
<span class="caption" title="$t('labels.community.followNocodb')" v-t="['community:twitter']"> {{
$t('labels.community.followNocodb')
}}</span>
$t('labels.community.followNocodb')
}}</span>
</v-list-item-title>
</v-list-item>
<v-list-item dense href="https://www.reddit.com/r/NocoDB/" target="_blank">
<!-- Book a Free DEMO -->
</v-list-item>-->
<!-- <v-list-item dense href="https://www.reddit.com/r/NocoDB/" target="_blank">
&lt;!&ndash; Book a Free DEMO &ndash;&gt;
<v-list-item-title>
<v-icon class="mr-1" small :color="textColors[3]">
mdi-calendar-month
</v-icon>
<span class="caption" :title="$t('labels.community.bookDemo')" v-t="['community:book-demo']">{{
<span v-t="['community:book-demo']" class="caption" :title="$t('labels.community.bookDemo')">{{
$t('labels.community.bookDemo')
}}</span>
</v-list-item-title>
</v-list-item>
</v-list-item>-->
</v-list>
</div>
</template>
@ -96,7 +118,6 @@
<script>
import ShareIcons from '../../../share-icons'
import SponsorMini from '~/components/sponsorMini'
import colors from '~/mixins/colors'
export default {
@ -106,8 +127,7 @@ export default {
data: () => ({
showCommunity: true
}),
computed: {
},
computed: {},
mounted() {
setInterval(() => {
this.showCommunity = !this.showCommunity
@ -138,8 +158,8 @@ export default {
}
.v-icon.discourse {
height: 16px;
width: 16px;
height: 22px;
width: 22px;
background-image: url('~/assets/img/discourse-icon.png');
background-size: contain;
background-repeat: no-repeat;
@ -150,19 +170,4 @@ export default {
content: "";
}
//
//@keyframes anim {
// 0%, 100% {
// opacity: .2;
// transform: scale(.5);
// }
// 50% {
// opacity: 1;
// transform: scale(1);
// }
//}
//
//.vue-icon {
// animation: anim 2s infinite;
//}
</style>

3
packages/nc-gui/mixins/device.js

@ -126,6 +126,9 @@ export default {
msg = e.response.data.msg || 'Some internal error occurred'
}
return msg || 'Some error occurred'
},
open(url, target = '_blank') {
window.open(url, target)
}
}
}

2
packages/noco-docs-prev/content/en/setup-and-usages/dashboard.md

@ -31,7 +31,7 @@ If you are using Docker, it is recommended to mount `/usr/app/data/` for persist
Example:
```
docker run -d -p 8080:8080 --name nocodb -v /local/path:/usr/app/data/ nocodb/nocodb:latest
docker run -d -p 8080:8080 --name nocodb -v "$(pwd)"/nocodb:/usr/app/data/ nocodb/nocodb:latest
```
## Initialize your first project

8
packages/noco-docs/content/en/getting-started/installation.md

@ -66,7 +66,7 @@ If you are a Docker user, you may try this way!
```bash
docker run -d --name nocodb \
-v /local/path:/usr/app/data/ \
-v "$(pwd)"/nocodb:/usr/app/data/ \
-p 8080:8080 \
nocodb/nocodb:latest
```
@ -77,7 +77,7 @@ If you are a Docker user, you may try this way!
```bash
docker run -d --name nocodb-mysql \
-v /local/path:/usr/app/data/ \
-v "$(pwd)"/nocodb:/usr/app/data/ \
-p 8080:8080 \
-e NC_DB="mysql2://host.docker.internal:3306?u=root&p=password&d=d1" \
-e NC_AUTH_JWT_SECRET="569a1821-0a93-45e8-87ab-eb857f20a010" \
@ -90,7 +90,7 @@ If you are a Docker user, you may try this way!
```bash
docker run -d --name nocodb-postgres \
-v /local/path:/usr/app/data/ \
-v "$(pwd)"/nocodb:/usr/app/data/ \
-p 8080:8080 \
-e NC_DB="pg://host.docker.internal:5432?u=root&p=password&d=d1" \
-e NC_AUTH_JWT_SECRET="569a1821-0a93-45e8-87ab-eb857f20a010" \
@ -103,7 +103,7 @@ If you are a Docker user, you may try this way!
```bash
docker run -d --name nocodb-mssql \
-v /local/path:/usr/app/data/ \
-v "$(pwd)"/nocodb:/usr/app/data/ \
-p 8080:8080 \
-e NC_DB="mssql://host.docker.internal:1433?u=root&p=password&d=d1" \
-e NC_AUTH_JWT_SECRET="569a1821-0a93-45e8-87ab-eb857f20a010" \

3
packages/nocodb/src/lib/dataMapper/lib/sql/BaseModelSqlv2.ts

@ -2055,8 +2055,7 @@ function extractCondition(nestedArrayConditions, aliasColObjMap) {
// eslint-disable-next-line prefer-const
let [logicOp, alias, op, value] =
str.match(/(?:~(and|or|not))?\((.*?),(\w+),(.*)\)/)?.slice(1) || [];
if (op === 'is') op = 'is' + value;
else if (op === 'in') value = value.split(',');
if (op === 'in') value = value.split(',');
return new Filter({
comparison_op: op,

26
packages/nocodb/src/lib/dataMapper/lib/sql/CustomKnex.ts

@ -432,18 +432,20 @@ const appendWhereCondition = function(
);
break;
case '':
const column = columnAliases[matches[2]] || matches[2];
const operator = opMapping[matches[3]];
const target = matches[4];
if (matches[3] == 'like' && clientType === 'pg') {
// handle uuid case
knexRef[`${key}`](
knexRef?.client.raw(`??::TEXT ${operator} '${target}'`, [
column
])
);
} else {
knexRef[`${key}`](column, operator, target);
{
const column = columnAliases[matches[2]] || matches[2];
const operator = opMapping[matches[3]];
const target = matches[4];
if (matches[3] == 'like' && clientType === 'pg') {
// handle uuid case
knexRef[`${key}`](
knexRef?.client.raw(`??::TEXT ${operator} '${target}'`, [
column
])
);
} else {
knexRef[`${key}`](column, operator, target);
}
}
break;
default:

14
packages/nocodb/src/lib/dataMapper/lib/sql/conditionV2.ts

@ -251,9 +251,19 @@ const parseConditionV2 = async (
else if (filter.value === 'notnull')
qb = qb.whereNotNull(customWhereClause || field);
else if (filter.value === 'empty')
qb = qb.where(customWhereClause || field);
qb = qb.where(customWhereClause || field, '');
else if (filter.value === 'notempty')
qb = qb.whereNot(customWhereClause || field);
qb = qb.whereNot(customWhereClause || field, '');
break;
case 'isnot':
if (filter.value === 'null')
qb = qb.whereNotNull(customWhereClause || field);
else if (filter.value === 'notnull')
qb = qb.whereNull(customWhereClause || field);
else if (filter.value === 'empty')
qb = qb.whereNot(customWhereClause || field, '');
else if (filter.value === 'notempty')
qb = qb.where(customWhereClause || field, '');
break;
case 'lt':
qb = qb.where(field, customWhereClause ? '>' : '<', val);

1
packages/nocodb/src/lib/noco-models/Filter.ts

@ -37,6 +37,7 @@ export default class Filter {
| 'ge'
| 'le'
| 'in'
| 'isnot'
| 'is';
value?: string;

2
packages/nocodb/src/lib/noco/upgrader/NcUpgrader.ts

@ -105,7 +105,7 @@ export default class NcUpgrader {
evt_type: 'appMigration:failed',
from: oldVersion,
to: process.env.NC_VERSION,
msg: e.msg
msg: e.message
});
}
}

11
packages/nocodb/src/lib/utils/projectAcl.ts

@ -3,6 +3,8 @@ export default {
creator: '*',
guest: {},
editor: {
hideAllColumns: true,
showAllColumns: true,
auditRowUpdate: true,
passwordChange: true,
// new permissions
@ -124,7 +126,8 @@ export default {
bulkDataDelete: true,
bulkDataDeleteAll: true,
relationDataRemove: true,
relationDataAdd: true
relationDataAdd: true,
dataCount: true
},
commenter: {
formViewGet: true,
@ -171,7 +174,8 @@ export default {
xcModelRowAuditAndCommentList: true,
xcAuditCommentInsert: true,
xcAuditModelCommentsCount: true,
xcExportAsCsv: true
xcExportAsCsv: true,
dataCount: true
},
viewer: {
formViewGet: true,
@ -213,7 +217,8 @@ export default {
relationListAll: true,
indexList: true,
list: true,
xcExportAsCsv: true
xcExportAsCsv: true,
dataCount: true
},
user_new: {
passwordChange: true,

2
scripts/markdown/readme/languages/chinese.md

@ -55,7 +55,7 @@ docker run -d --name nocodb -p 8080:8080 nocodb/nocodb:latest
示例:
```
docker run -d -p 8080:8080 --name nocodb -v /local/path:/usr/app/data/ nocodb/nocodb:latest
docker run -d -p 8080:8080 --name nocodb -v "$(pwd)"/nocodb:/usr/app/data/ nocodb/nocodb:latest
```
### 使用NPM

2
scripts/markdown/readme/languages/dutch.md

@ -59,7 +59,7 @@ docker run -d --name nocodb -p 8080:8080 nocodb/nocodb:latest
Example:
```
docker run -d -p 8080:8080 --name nocodb -v /local/path:/usr/app/data/ nocodb/nocodb:latest
docker run -d -p 8080:8080 --name nocodb -v "$(pwd)"/nocodb:/usr/app/data/ nocodb/nocodb:latest
```
### Gebruik van NPM

2
scripts/markdown/readme/languages/french.md

@ -57,7 +57,7 @@ docker run -d --name nocodb -p 8080:8080 nocodb/nocodb:latest
Example:
```
docker run -d -p 8080:8080 --name nocodb -v /local/path:/usr/app/data/ nocodb/nocodb:latest
docker run -d -p 8080:8080 --name nocodb -v "$(pwd)"/nocodb:/usr/app/data/ nocodb/nocodb:latest
```
> To persist data you can mount volume at `/usr/app/data/`.

2
scripts/markdown/readme/languages/german.md

@ -59,7 +59,7 @@ docker run -d --name nocodb -p 8080:8080 nocodb/nocodb:latest
Beispiel:
```
docker run -d -p 8080:8080 --name nocodb -v /local/path:/usr/app/data/ nocodb/nocodb:latest
docker run -d -p 8080:8080 --name nocodb -v "$(pwd)"/nocodb:/usr/app/data/ nocodb/nocodb:latest
```
### Verwenden von NPM

2
scripts/markdown/readme/languages/indonesian.md

@ -59,7 +59,7 @@ docker run -d --name nocodb -p 8080:8080 nocodb/nocodb:latest
Example:
```
docker run -d -p 8080:8080 --name nocodb -v /local/path:/usr/app/data/ nocodb/nocodb:latest
docker run -d -p 8080:8080 --name nocodb -v "$(pwd)"/nocodb:/usr/app/data/ nocodb/nocodb:latest
```
### Menggunakan NPM

2
scripts/markdown/readme/languages/italian.md

@ -58,7 +58,7 @@ docker run -d --name nocodb -p 8080:8080 nocodb/nocodb:latest
Example:
```
docker run -d -p 8080:8080 --name nocodb -v /local/path:/usr/app/data/ nocodb/nocodb:latest
docker run -d -p 8080:8080 --name nocodb -v "$(pwd)"/nocodb:/usr/app/data/ nocodb/nocodb:latest
```
### Con NPM

2
scripts/markdown/readme/languages/japanese.md

@ -59,7 +59,7 @@ docker run -d --name nocodb -p 8080:8080 nocodb/nocodb:latest
Example:
```
docker run -d -p 8080:8080 --name nocodb -v /local/path:/usr/app/data/ nocodb/nocodb:latest
docker run -d -p 8080:8080 --name nocodb -v "$(pwd)"/nocodb:/usr/app/data/ nocodb/nocodb:latest
```
### NPM を使用して

2
scripts/markdown/readme/languages/korean.md

@ -59,7 +59,7 @@ docker run -d --name nocodb -p 8080:8080 nocodb/nocodb:latest
Example:
```
docker run -d -p 8080:8080 --name nocodb -v /local/path:/usr/app/data/ nocodb/nocodb:
docker run -d -p 8080:8080 --name nocodb -v "$(pwd)"/nocodb:/usr/app/data/ nocodb/nocodb:
### npm 사용

2
scripts/markdown/readme/languages/portuguese.md

@ -59,7 +59,7 @@ docker run -d --name nocodb -p 8080:8080 nocodb/nocodb:latest
Example:
```
docker run -d -p 8080:8080 --name nocodb -v /local/path:/usr/app/data/ nocodb/nocodb:latest
docker run -d -p 8080:8080 --name nocodb -v "$(pwd)"/nocodb:/usr/app/data/ nocodb/nocodb:latest
```
### Usando npm.

2
scripts/markdown/readme/languages/russian.md

@ -59,7 +59,7 @@ docker run -d --name nocodb -p 8080:8080 nocodb/nocodb:latest
Example:
```
docker run -d -p 8080:8080 --name nocodb -v /local/path:/usr/app/data/ nocodb/nocodb:latest
docker run -d -p 8080:8080 --name nocodb -v "$(pwd)"/nocodb:/usr/app/data/ nocodb/nocodb:latest
```
### Используя NPM

2
scripts/markdown/readme/languages/spanish.md

@ -59,7 +59,7 @@ docker run -d --name nocodb -p 8080:8080 nocodb/nocodb:latest
Example:
```
docker run -d -p 8080:8080 --name nocodb -v /local/path:/usr/app/data/ nocodb/nocodb:latest
docker run -d -p 8080:8080 --name nocodb -v "$(pwd)"/nocodb:/usr/app/data/ nocodb/nocodb:latest
```
### Usando npm.

Loading…
Cancel
Save