jekyll-algolia 1.0.1 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CONTRIBUTING.md +41 -30
- data/README.md +1 -1
- data/lib/jekyll-algolia.rb +6 -3
- data/lib/jekyll/algolia/configurator.rb +14 -13
- data/lib/jekyll/algolia/error_handler.rb +0 -24
- data/lib/jekyll/algolia/indexer.rb +71 -134
- data/lib/jekyll/algolia/version.rb +1 -1
- metadata +2 -3
- data/lib/errors/invalid_credentials_for_tmp_index.txt +0 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 18ee9d2d725bb531703ddc05d9f31250959d81ff
|
4
|
+
data.tar.gz: 93115f75f4d41d301898b77809732453d5c195f2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fed961094843fdf503620f86fcb83313c96b68061ce0d170b1a66f018d60cf1edf0a68a9dd5df7f17dee5c2a6e6e4fa05e677ae5a743383c859c42f3443e6bba
|
7
|
+
data.tar.gz: d66ea9ca93b8cafc3749711f17d27f03753ddfc6f4de70d2cc94296e5209b9247f2e3bbbefbf924414e5fe3c380f13c13fac87f80b8eed9322ccb0338d2dad2b
|
data/CONTRIBUTING.md
CHANGED
@@ -1,10 +1,9 @@
|
|
1
1
|
Hi collaborator!
|
2
2
|
|
3
|
-
If you have a fix or a new feature, please start by checking in the
|
4
|
-
|
5
|
-
already referenced. If not, feel free to open one.
|
3
|
+
If you have a fix or a new feature, please start by checking in the [issues][1]
|
4
|
+
if it is already referenced. If not, feel free to open one.
|
6
5
|
|
7
|
-
We use [pull requests]
|
6
|
+
We use [pull requests][2]
|
8
7
|
for collaboration. The workflow is as follow:
|
9
8
|
|
10
9
|
- Create a local branch, starting from `develop`
|
@@ -20,23 +19,18 @@ Start by running `bundle install` to get all the dependencies up to date.
|
|
20
19
|
|
21
20
|
## Testing
|
22
21
|
|
23
|
-
Run `rake test` to launch
|
24
|
-
|
22
|
+
Run `rake test` to launch the test suite. Run `./scripts/test_all_ruby_versions`
|
23
|
+
to run the test on all the supported ruby versions (requires `rvm`).
|
25
24
|
|
26
25
|
## TDD
|
27
26
|
|
28
|
-
|
29
|
-
|
30
|
-
## Testing different ruby versions
|
31
|
-
|
32
|
-
You can test the gem across all the supported Ruby versions by running
|
33
|
-
`./scripts/test_all_ruby_versions`. Note that you will need to have RVM
|
34
|
-
installed for this to work.
|
27
|
+
Run `rake watch` to start a watcher on the code and test files. Whenever you
|
28
|
+
update the code, the relevant tests will be run. Incredibly useful for TDD.
|
35
29
|
|
36
30
|
## Testing local changes on an existing Jekyll website
|
37
31
|
|
38
32
|
If you want to test the plugin on an existing Jekyll website while developping,
|
39
|
-
|
33
|
+
we suggest updating the website `Gemfile` to point to the correct local directory
|
40
34
|
|
41
35
|
```ruby
|
42
36
|
group :jekyll_plugins do
|
@@ -44,10 +38,19 @@ group :jekyll_plugins do
|
|
44
38
|
end
|
45
39
|
```
|
46
40
|
|
41
|
+
## Linting
|
42
|
+
|
43
|
+
Run `rake lint` to check the style of all ruby files. Run `rake
|
44
|
+
lint:auto_correct` to try to automatically correct the potential violations.
|
45
|
+
It's always a good practice to double check the modification after an
|
46
|
+
auto-correct.
|
47
|
+
|
47
48
|
# Git Hooks
|
48
49
|
|
49
|
-
If you plan on submitting a PR,
|
50
|
-
`./scripts/git_hook`.
|
50
|
+
If you plan on submitting a PR, we suggest you install the git hooks located in
|
51
|
+
`./scripts/git_hook`. Those hooks will run the linter on each commit, and the
|
52
|
+
tests before each push. This greatly help reduce the chances of breaking the
|
53
|
+
build on Travis.
|
51
54
|
|
52
55
|
The easiest way is to create a symlink from your `.git/hooks` folder:
|
53
56
|
|
@@ -67,28 +70,36 @@ the git tags, create the gem and push it to Rubygems.
|
|
67
70
|
|
68
71
|
## Requirements
|
69
72
|
|
70
|
-
|
73
|
+
The documentation website uses Metalsmith (and not Jekyll), so you'll need:
|
71
74
|
|
72
|
-
- Node.js >= v9.2.0, use nvm - [install instructions]
|
73
|
-
- Yarn >= v1.3.2 - [install instructions]
|
75
|
+
- Node.js >= v9.2.0, use nvm - [install instructions][3]
|
76
|
+
- Yarn >= v1.3.2 - [install instructions][4]
|
74
77
|
|
75
78
|
## Development
|
76
79
|
|
77
|
-
|
78
|
-
yarn
|
79
|
-
yarn start
|
80
|
-
```
|
80
|
+
All the documentation source files live in the `./docs-src` folder.
|
81
81
|
|
82
|
-
|
82
|
+
To serve a local version of the documentation (including livereload), run `rake
|
83
|
+
docs:serve`. The documentation will be available on
|
84
|
+
[localhost:3000](http://localhost:3000/).
|
83
85
|
|
84
|
-
|
86
|
+
This will create a `./docs-dev` folder and serve files from there. This folder
|
87
|
+
is ignored by git.
|
85
88
|
|
86
|
-
|
87
|
-
yarn docs:update
|
88
|
-
git push
|
89
|
-
```
|
89
|
+
## Deploying docs
|
90
90
|
|
91
|
+
To update the documentation website, you should run `rake docs:deploy` from the
|
92
|
+
`develop` branch. This will merge `develop` into master, build the documentation
|
93
|
+
into `docs` and push it. The content of the `./docs` folder will then be server
|
94
|
+
by GitHub pages.
|
91
95
|
|
92
96
|
# Project owner
|
93
97
|
|
94
|
-
[@pixelastic]
|
98
|
+
[@pixelastic][5]
|
99
|
+
|
100
|
+
|
101
|
+
[1]: https://github.com/algolia/jekyll-algolia/issues
|
102
|
+
[2]: https://github.com/algolia/jekyll-algolia/pulls
|
103
|
+
[3]: https://github.com/creationix/nvm#install-script
|
104
|
+
[4]: https://yarnpkg.com/en/docs/install#alternatives-tab
|
105
|
+
[5]: https://github.com/pixelastic
|
data/README.md
CHANGED
@@ -6,7 +6,7 @@ Status][3]](https://coveralls.io/github/algolia/jekyll-algolia?branch=master)
|
|
6
6
|
[![Code Climate][4]](https://codeclimate.com/github/algolia/jekyll-algolia)
|
7
7
|
![Jekyll >= 3.6.0][5] ![Ruby >= 2.3.0][6]
|
8
8
|
|
9
|
-
|
9
|
+
Add fast and relevant search to your Jekyll site.
|
10
10
|
|
11
11
|
## Usage
|
12
12
|
|
data/lib/jekyll-algolia.rb
CHANGED
@@ -33,6 +33,8 @@ module Jekyll
|
|
33
33
|
|
34
34
|
exit 1 unless Configurator.assert_valid_credentials
|
35
35
|
|
36
|
+
Configurator.warn_of_deprecated_options
|
37
|
+
|
36
38
|
if Configurator.dry_run?
|
37
39
|
Logger.log('W:==== THIS IS A DRY RUN ====')
|
38
40
|
Logger.log('W: - No records will be pushed to your index')
|
@@ -72,9 +74,10 @@ module Jekyll
|
|
72
74
|
|
73
75
|
# Public: Get access to the time at which the command was run
|
74
76
|
#
|
75
|
-
# Jekyll will
|
76
|
-
#
|
77
|
-
#
|
77
|
+
# Jekyll will always set the updated time of pages to the time of the build
|
78
|
+
# run. The plugin needs those values to stay at nil if they did not change,
|
79
|
+
# so we'll keep track of the time at build time and revert any page build at
|
80
|
+
# that time to nil.
|
78
81
|
def self.start_time
|
79
82
|
@start_time
|
80
83
|
end
|
@@ -12,7 +12,6 @@ module Jekyll
|
|
12
12
|
'files_to_exclude' => nil,
|
13
13
|
'nodes_to_index' => 'p',
|
14
14
|
'indexing_batch_size' => 1000,
|
15
|
-
'indexing_mode' => 'diff',
|
16
15
|
'settings' => {
|
17
16
|
'distinct' => true,
|
18
17
|
'attributeForDistinct' => 'url',
|
@@ -129,18 +128,6 @@ module Jekyll
|
|
129
128
|
ALGOLIA_DEFAULTS['settings'].merge(user_settings)
|
130
129
|
end
|
131
130
|
|
132
|
-
# Public: Return the current indexing mode
|
133
|
-
#
|
134
|
-
# Default mode is `diff`, but users can configure their own by updating
|
135
|
-
# the `indexing_mode` config in _config.yml. The only other authorized
|
136
|
-
# value is `atomic`. If an unrecognized mode is defined, it defaults to
|
137
|
-
# `diff`.
|
138
|
-
def self.indexing_mode
|
139
|
-
mode = algolia('indexing_mode') || ALGOLIA_DEFAULTS['indexing_mode']
|
140
|
-
return 'diff' unless %w[diff atomic].include?(mode)
|
141
|
-
mode
|
142
|
-
end
|
143
|
-
|
144
131
|
# Public: Check that all credentials are set
|
145
132
|
#
|
146
133
|
# Returns true if everything is ok, false otherwise. Will display helpful
|
@@ -197,6 +184,20 @@ module Jekyll
|
|
197
184
|
return true if value == true
|
198
185
|
false
|
199
186
|
end
|
187
|
+
|
188
|
+
# Public: Check for any deprecated config option and warn the user
|
189
|
+
def self.warn_of_deprecated_options
|
190
|
+
# indexing_mode is no longer used
|
191
|
+
return if algolia('indexing_mode').nil?
|
192
|
+
|
193
|
+
# rubocop:disable Metrics/LineLength
|
194
|
+
Logger.log('I:')
|
195
|
+
Logger.log('W:[jekyll-algolia] You are using the algolia.indexing_mode option which has been deprecated in v1.1')
|
196
|
+
Logger.log('I: Indexing is now always using an atomic diff algorithm.')
|
197
|
+
Logger.log('I: This option is no longer necessary, you can remove it from your _config.yml')
|
198
|
+
Logger.log('I:')
|
199
|
+
# rubocop:enable Metrics/LineLength
|
200
|
+
end
|
200
201
|
end
|
201
202
|
end
|
202
203
|
end
|
@@ -47,7 +47,6 @@ module Jekyll
|
|
47
47
|
def self.identify(error, context = {})
|
48
48
|
known_errors = %w[
|
49
49
|
unknown_application_id
|
50
|
-
invalid_credentials_for_tmp_index
|
51
50
|
invalid_credentials
|
52
51
|
record_too_big
|
53
52
|
unknown_settings
|
@@ -156,29 +155,6 @@ module Jekyll
|
|
156
155
|
{ 'application_id' => app_id }
|
157
156
|
end
|
158
157
|
|
159
|
-
# Public: Check if credentials specifically can't access the _tmp index
|
160
|
-
#
|
161
|
-
# _context - Not used
|
162
|
-
#
|
163
|
-
# If the error happens on a _tmp folder, it might mean that the key does
|
164
|
-
# not have access to the _tmp indices and the error message will reflect
|
165
|
-
# that.
|
166
|
-
def self.invalid_credentials_for_tmp_index?(error, _context = {})
|
167
|
-
details = error_hash(error.message)
|
168
|
-
|
169
|
-
index_name_tmp = details['index_name']
|
170
|
-
if details['message'] != 'Index not allowed with this API key' ||
|
171
|
-
index_name_tmp !~ /_tmp$/
|
172
|
-
return false
|
173
|
-
end
|
174
|
-
|
175
|
-
{
|
176
|
-
'application_id' => Configurator.application_id,
|
177
|
-
'index_name' => Configurator.index_name,
|
178
|
-
'index_name_tmp' => index_name_tmp
|
179
|
-
}
|
180
|
-
end
|
181
|
-
|
182
158
|
# Public: Check if the credentials are working
|
183
159
|
#
|
184
160
|
# _context - Not used
|
@@ -45,45 +45,17 @@ module Jekyll
|
|
45
45
|
::Algolia::Index.new(index_name)
|
46
46
|
end
|
47
47
|
|
48
|
-
# Public:
|
48
|
+
# Public: Check if an index exists
|
49
49
|
#
|
50
|
-
#
|
51
|
-
# records - Array of records to update
|
50
|
+
# index_name - Name of the index
|
52
51
|
#
|
53
|
-
#
|
54
|
-
#
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
records.each_slice(batch_size) do |batch|
|
61
|
-
Logger.log("I:Pushing #{batch.size} records")
|
62
|
-
next if Configurator.dry_run?
|
63
|
-
begin
|
64
|
-
index.add_objects!(batch)
|
65
|
-
rescue StandardError => error
|
66
|
-
ErrorHandler.stop(error, records: records)
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
# Public: Delete records whose objectIDs are passed
|
72
|
-
#
|
73
|
-
# index - Algolia Index to target
|
74
|
-
# ids - Array of objectIDs to delete
|
75
|
-
#
|
76
|
-
# Does nothing in dry run mode
|
77
|
-
def self.delete_records_by_id(index, ids)
|
78
|
-
return if ids.empty?
|
79
|
-
Logger.log("I:Deleting #{ids.length} records")
|
80
|
-
return if Configurator.dry_run?
|
81
|
-
|
82
|
-
begin
|
83
|
-
index.delete_objects!(ids)
|
84
|
-
rescue StandardError => error
|
85
|
-
ErrorHandler.stop(error)
|
86
|
-
end
|
52
|
+
# Note: there is no API endpoint to do that, so we try to get the settings
|
53
|
+
# instead, which will fail if the index does not exist
|
54
|
+
def self.index?(index_name)
|
55
|
+
index(index_name).get_settings
|
56
|
+
return true
|
57
|
+
rescue StandardError
|
58
|
+
return false
|
87
59
|
end
|
88
60
|
|
89
61
|
# Public: Returns an array of all the objectIDs in the index
|
@@ -119,113 +91,69 @@ module Jekyll
|
|
119
91
|
# Public: Update settings of the index
|
120
92
|
#
|
121
93
|
# index - The Algolia Index
|
122
|
-
# settings - The hash of settings to pass to the index
|
123
94
|
#
|
124
95
|
# Does nothing in dry run mode
|
125
|
-
|
96
|
+
# Settings will only be updated in the first push, and if custom settings
|
97
|
+
# are defined in _config.yml. Otherwise, they are left untouched, allowing
|
98
|
+
# users to configure them through their dashboard.
|
99
|
+
def self.update_settings(index)
|
100
|
+
has_custom_settings = !Configurator.algolia('settings').nil?
|
101
|
+
index_exists = index?(index.name)
|
102
|
+
|
103
|
+
# No need to update the settings if the index is already configured and
|
104
|
+
# the user did not specify custom settings
|
105
|
+
return if index_exists && !has_custom_settings
|
106
|
+
|
126
107
|
Logger.verbose('I:Updating settings')
|
127
108
|
return if Configurator.dry_run?
|
109
|
+
settings = Configurator.settings
|
128
110
|
begin
|
129
|
-
index.set_settings(settings)
|
111
|
+
index.set_settings!(settings)
|
130
112
|
rescue StandardError => error
|
131
113
|
ErrorHandler.stop(error, settings: settings)
|
132
114
|
end
|
133
115
|
end
|
134
116
|
|
135
|
-
# Public:
|
117
|
+
# Public: Update records of the index
|
136
118
|
#
|
137
|
-
#
|
119
|
+
# index_name - The Algolia index
|
120
|
+
# old_records_ids - Ids of records to delete from the index
|
121
|
+
# new_records - Records to add to the index
|
138
122
|
#
|
139
|
-
#
|
140
|
-
#
|
141
|
-
#
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
# Update settings
|
147
|
-
update_settings(index, Configurator.settings)
|
148
|
-
|
149
|
-
# Getting list of objectID in remote and locally
|
150
|
-
remote_ids = remote_object_ids(index)
|
151
|
-
local_ids = local_object_ids(records)
|
152
|
-
|
153
|
-
old_records_ids = remote_ids - local_ids
|
154
|
-
new_records_ids = local_ids - remote_ids
|
155
|
-
if old_records_ids.empty? && new_records_ids.empty?
|
123
|
+
# Note: All operations will be done in one batch, assuring an atomic
|
124
|
+
# update
|
125
|
+
# Does nothing in dry run mode
|
126
|
+
def self.update_records(index_name, old_records_ids, new_records)
|
127
|
+
# Stop if nothing to change
|
128
|
+
if old_records_ids.empty? && new_records.empty?
|
156
129
|
Logger.log('I:Nothing to index. Your content is already up to date.')
|
157
130
|
return
|
158
131
|
end
|
159
132
|
|
160
|
-
Logger.log("I:Updating records in index #{
|
161
|
-
|
162
|
-
|
163
|
-
|
133
|
+
Logger.log("I:Updating records in index #{index_name}...")
|
134
|
+
Logger.log("I:Records to delete: #{old_records_ids.length}")
|
135
|
+
Logger.log("I:Records to add: #{new_records.length}")
|
136
|
+
return if Configurator.dry_run?
|
164
137
|
|
165
|
-
|
166
|
-
|
167
|
-
new_records_ids.include?(record[:objectID])
|
138
|
+
operations = new_records.map do |new_record|
|
139
|
+
{ action: 'addObject', indexName: index_name, body: new_record }
|
168
140
|
end
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
# Public: Get the settings of the remote index
|
175
|
-
#
|
176
|
-
# index - The Algolia Index
|
177
|
-
def self.remote_settings(index)
|
178
|
-
index.get_settings
|
179
|
-
rescue StandardError => error
|
180
|
-
ErrorHandler.stop(error)
|
181
|
-
end
|
182
|
-
|
183
|
-
# Public: Rename an index
|
184
|
-
#
|
185
|
-
# old_name - Current name of the index
|
186
|
-
# new_name - New name of the index
|
187
|
-
#
|
188
|
-
# Does nothing in dry run mode
|
189
|
-
def self.rename_index(old_name, new_name)
|
190
|
-
Logger.verbose("I:Renaming `#{old_name}` to `#{new_name}`")
|
191
|
-
return if Configurator.dry_run?
|
192
|
-
begin
|
193
|
-
::Algolia.move_index(old_name, new_name)
|
194
|
-
rescue StandardError => error
|
195
|
-
ErrorHandler.stop(error, new_name: new_name)
|
141
|
+
old_records_ids.each do |object_id|
|
142
|
+
operations << {
|
143
|
+
action: 'deleteObject', indexName: index_name,
|
144
|
+
body: { objectID: object_id }
|
145
|
+
}
|
196
146
|
end
|
197
|
-
end
|
198
|
-
|
199
|
-
# Public: Index content following the `atomic` indexing mode
|
200
|
-
#
|
201
|
-
# records - Array of records to push
|
202
|
-
#
|
203
|
-
# The `atomic` indexing mode will push all records to a brand new index,
|
204
|
-
# configure it, and then overwrite the previous index with this new one.
|
205
|
-
# For the end-user, it will make all the changes in one go, making sure
|
206
|
-
# people are always searching into a fully configured index. It will
|
207
|
-
# consume more operations, but will never leave the index in a transient
|
208
|
-
# state.
|
209
|
-
def self.run_atomic_mode(records)
|
210
|
-
index_name = Configurator.index_name
|
211
|
-
index = index(index_name)
|
212
|
-
index_tmp_name = "#{Configurator.index_name}_tmp"
|
213
|
-
index_tmp = index(index_tmp_name)
|
214
|
-
|
215
|
-
Logger.verbose("I:Using `#{index_tmp_name}` as temporary index")
|
216
147
|
|
217
|
-
#
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
rename_index(index_tmp_name, index_name)
|
227
|
-
|
228
|
-
Logger.log('I:✔ Indexing complete')
|
148
|
+
# Run the batches in slices if they are too large
|
149
|
+
batch_size = Configurator.algolia('indexing_batch_size')
|
150
|
+
operations.each_slice(batch_size) do |slice|
|
151
|
+
begin
|
152
|
+
::Algolia.batch!(slice)
|
153
|
+
rescue StandardError => error
|
154
|
+
ErrorHandler.stop(error)
|
155
|
+
end
|
156
|
+
end
|
229
157
|
end
|
230
158
|
|
231
159
|
# Public: Push all records to Algolia and configure the index
|
@@ -234,10 +162,8 @@ module Jekyll
|
|
234
162
|
def self.run(records)
|
235
163
|
init
|
236
164
|
|
237
|
-
record_count = records.length
|
238
|
-
|
239
165
|
# Indexing zero record is surely a misconfiguration
|
240
|
-
if
|
166
|
+
if records.length.zero?
|
241
167
|
files_to_exclude = Configurator.algolia('files_to_exclude').join(', ')
|
242
168
|
Logger.known_message(
|
243
169
|
'no_records_found',
|
@@ -247,14 +173,25 @@ module Jekyll
|
|
247
173
|
exit 1
|
248
174
|
end
|
249
175
|
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
176
|
+
index_name = Configurator.index_name
|
177
|
+
index = index(index_name)
|
178
|
+
|
179
|
+
# Update settings
|
180
|
+
update_settings(index)
|
181
|
+
|
182
|
+
# Getting list of objectID in remote and locally
|
183
|
+
remote_ids = remote_object_ids(index)
|
184
|
+
local_ids = local_object_ids(records)
|
185
|
+
|
186
|
+
# Getting list of what to add and what to delete
|
187
|
+
old_records_ids = remote_ids - local_ids
|
188
|
+
new_records_ids = local_ids - remote_ids
|
189
|
+
new_records = records.select do |record|
|
190
|
+
new_records_ids.include?(record[:objectID])
|
257
191
|
end
|
192
|
+
update_records(index_name, old_records_ids, new_records)
|
193
|
+
|
194
|
+
Logger.log('I:✔ Indexing complete')
|
258
195
|
end
|
259
196
|
end
|
260
197
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll-algolia
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tim Carry
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-01-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: algolia_html_extractor
|
@@ -257,7 +257,6 @@ files:
|
|
257
257
|
- CONTRIBUTING.md
|
258
258
|
- README.md
|
259
259
|
- lib/errors/invalid_credentials.txt
|
260
|
-
- lib/errors/invalid_credentials_for_tmp_index.txt
|
261
260
|
- lib/errors/invalid_index_name.txt
|
262
261
|
- lib/errors/missing_api_key.txt
|
263
262
|
- lib/errors/missing_application_id.txt
|
@@ -1,17 +0,0 @@
|
|
1
|
-
E: [✗ Error] Invalid credentials for temporary index
|
2
|
-
E:
|
3
|
-
E: The jekyll-algolia plugin could not access your index with the API key you
|
4
|
-
E: provided.
|
5
|
-
W:
|
6
|
-
W: When using the `atomic` indexing mode, we will push all your content to a
|
7
|
-
W: temporary index, then overwrite the actual index with it. The API key you
|
8
|
-
W: defined should have access rights on both.
|
9
|
-
I:
|
10
|
-
I: Make sure your API key has access:
|
11
|
-
I: - {index_name}
|
12
|
-
I: - {index_name_tmp}
|
13
|
-
I:
|
14
|
-
I: You can configure API keys from your dashboard:
|
15
|
-
I: https://www.algolia.com/apps/{application_id}/api-keys/restricted
|
16
|
-
I:
|
17
|
-
I:
|