Если вы видите запись «DMARC не найдена», запись «DMARC не опубликована» или запись «DMARC отсутствует», это означает, что в домене отсутствует самый эффективный и мощный механизм идентификации электронной почты, такой как DMARC.
Чтобы предотвратить спуфинг электронной почты (практика злоумышленников маскироваться под конкретного пользователя или подключенного к сети устройства с целью похищения данных), все домены должны иметь систему авторизации электронной почты. Наверное, вы слышали о механизмах SPF и DKIM. Но дело в том, что ни SPF, ни DKIM сами по себе не могут остановить заимствование вашего домена и не могут предотвратить спуфинг электронной почты. DMARC (Domain-based Message Authentication, Reporting & Conformance) приходит на помощь. Он сочетает в себе механизмы SPF и DKIM и обеспечивает 100% защиту от атак.
DMARC может защищать от фишинг атак. Фишинг — это мошенническая попытка получить конфиденциальную информацию. Выдавая себя за правомерного индивида, хакеры манипулируют жертвами для выполнения определенных действий. По данным Verizon Data Breach Investigations Report 2018, Фишинг и претекстинг составляют 93% нарушений. 80% всех нарушений связаны с учетными данными DBIR.
Итак, как исправить и добавить отсутствующую запись DMARC?
Возможно, вы получили упомянутое ниже с помощью какого-нибудь инструмента проверки DMARC:
-
No DMARC record
-
No DMARC record found
-
DMARC record is missing
-
DMARC record not found
-
No DMARC record published
-
DMARC policy not enabled
-
Unable to find DMARC record
В зависимости от того, чего вы хотите достичь. Есть 2 возможных варианта.
Вариант 1: Просто избавьтесь от раздражающего сообщения “No DMARC record”, не понимая реальной ценности DMARC и любой защиты от спуфинга электронной почты.
Ответ очень прост. Технически исправление “Записи DMARC Не найдено” буквально означает добавление записи DNS TXT в субдомен _dmarc.yourdomain.com в соответствии со спецификацией DMARC.
Простую запись DMARC можно рассмотреть на следующем примере:
v=DMARC1; p=none; rua=mailto:whateveryoulike@yourdomain.com
Получилось! Недостающая запись DMARC была успешно добавлена.
Поздравляю, но этой записи недостаточно, чтобы остановить спуфинг и атаки с изменением авторства.
Вариант 2: Обеспечьте 100% защиту от атак с изменением авторства и спуфинга.
Чтобы добиться 100% защиты, вам нужно понять механизм системы DMARC и то, как она работает. Трудно добиться 100% защиты от спуфинга электронной почты; это требует усердия и некоторого времени (обычно более 2 месяцев и зависит от того, насколько сложна ваша инфраструктура электронной почты).
Сложность в том, что, если ваша конфигурация неверна, то не только поддельные электронные письма, отправленные хакерами с вашего домена, но и ваши действительные электронные письма могут быть отклонены. Это как иметь защищенную папку, к которой никто не может получить доступ, и даже вы не можете получить к ней доступ (папка очень безопасна, но она бесполезна, если даже пользователь не может получить к ней доступ).
Процесс начинается с простого ввода базовой записи DMARC.
3 шага для устранения проблемы “No DMARC record found”
1. Опубликуйте запись SPF.
Используйте бесплатный генератор SPF записи EasyDMARC или любой другой, чтобы создать свою запись и опубликовать сгенерированную запись в вашем DNS.
Запись SPF выглядит следующим образом.
v=spf1 include:spf.easydmarc.com include:amazonses.com ip4:198.105.215.71/32 -all
2. Настройте идентификацию DKIM.
Далее вам нужно настроить свой почтовый сервер. Для этого вы можете использовать бесплатный генератор DKIM записи EasyDMARC для идентификации DKIM. Вот автоматический скрипт, который поможет вам настроить почтовый сервер Linux с помощью DKIM.
Для правильного синтаксиса необходимо использовать генераторы записей DKIM.
3. Опубликуйте запись DMARC.
Наконец готовы настроить запись DMARC. Используйте бесплатный генератор DMARC записи EasyDMARC и опубликуйте сгенерированную запись в свой DNS.Во-первых, настоятельно рекомендуется иметь политику мониторинга (p=none). После получения успешных результатов мониторинга система предложит вам изменить опубликованную политику.
Не используйте политику p=reject в самом начале, если вы не уверены, что у вас есть правильная конфигурация и видимость в вашей почтовой инфраструктуре.
Очень важно подчеркнуть, что ни SPF, ни DKIM сами по себе не могут помешать киберпреступникам отправлять электронные письма с использованием вашего домена.
Имейте в виду, что только запись DMARC с политикой “p=reject” является самой мощной и стандартной в отрасли системой идентификации электронной почты. Однако добиться “p=reject” трудно, потому что размещение его в DNS без надлежащего мониторинга может привести к тому, что ваши действительные электронные письма будут отклонены.
Вы можете легко определить и устранить свои проблемы, автоматизировав свои отчеты с помощью EasyDMARC. Вот пример вышеупомянутых агрегированных отчетов DMARC:
Эти статьи помогут вам настроить DMARC-записи от различных провайдеров DNS:
-
GoDaddy DNS
-
Cloudflare DNS
-
AWS DNS
-
Azure DNS
Подводя итог, можно сказать, что настроить идентификацию электронной почты довольно просто, но профессионалы сделают это быстрее и качественнее.
You see one of these messages in your error.log:
*WARN * BLOBInDataStore: getSize for a586f73ec77fba3135021af01c7f09d972eb3e01 failed (BLOBInDataStore.java, line 95) org.apache.jackrabbit.core.data.DataStoreException: Record not found: a586f73ec77fba3135021af01c7f09d972eb3e01 org.apache.jackrabbit.core.data.DataStoreException: Failed to read record modified date: /opt/author/crx-quickstart/repository/shared/repository/datastore/6f/b6/14/6fb61425b9187a97f9404cee290cc255177c702e Caused by: java.io.FileNotFoundException: /opt/author/crx-quickstart/repository/shared/repository/datastore/6f/b6/14/6fb61425b9187a97f9404cee290cc255177c702e at org.apache.jackrabbit.core.data.LazyFileInputStream.<init>(LazyFileInputStream.java:63) at org.apache.jackrabbit.core.data.FileDataRecord.getStream(FileDataRecord.java:57) ... 114 more
This error means that you are missing files from your AEM datastore directory. See this documentation for more details about what the datastore is and how it works. The loss of datastore files can be due to a failure of datastore garbage collection, a disk space outage, disk, or network share instability. Or, it could be due to a user erroneously deleting files from the server.
To recover the missing files, follow the steps below.
Before you continue, if you are using CQ5.4 or earlier then download the latest CRX hot fix and install it if your CQ instance is starting up.
You can find the latest hot fixes on Adobe Package Share.
If there are missing tar files as described in this article, then address that issue first. If there are missing tar files, then you are likely to see some errors such as «File not found:» in your error.log.
For example, here are some errors that were seen during datastore GC due to a missing tar file:
27.02.2012 13:55:01 *WARN * TarSet: File not found: 4650 for entry 6c18a73a-aba1-44b8-93c2-90fb49cac5e5 pos:4650/148692992 length: 669 from /opt/author/crx-quickstart/repository/workspaces/crx.default/copy [4651, 4652, 4653, 4654, 4655, 4656, 4657, 4658, 4659, 4660, 4661, 4662, 4663]. 27.02.2012 13:55:38 *INFO * FileDataStore: Deleting old file /opt/author/crx-quickstart/repository/shared/repository/datastore/6f/b6/14/6fb61425b9187a97f9404cee290cc255177c702e modified: 2012-02-23 10:06:58.0 length: 6555 (FileDataStore.java, line 315) 28.02.2012 10:49:46 *WARN * BLOBInDataStore: getSize for 6fb61425b9187a97f9404cee290cc255177c702e failed (BLOBInDataStore.java, line 95) org.apache.jackrabbit.core.data.DataStoreException: Failed to read record modified date: /opt/author/crx-quickstart/repository/shared/repository/datastore/6f/b6/14/6fb61425b9187a97f9404cee290cc255177c702e
The only way to get a complete list of all missing files in the datastore is to run a DataStore Consistency Check. If your AEM instance is able to start up, then follow these steps on the running instance:
- Go to CRX Explorer and log in as admin.
— http://<host>:<port>/crx (CQ5.4/CRX2.2 and earlier)
— http://<host>:<port>/crx/explorer/index.jsp (CQ5.5/CRX2.3 and later versions) - Click Repository Configuration.
- Click Check Repository.
- Select Data Store Consistency.
- Click Run.
- Keep your browser open for the duration of the process. It only outputs messages to the screen when an error is found and the process does not write any messages to the log file. The error messages report the path of the node where the datastore record was referenced from and the record id of the missing file.
- When the process completes, copy the output to a text file consistency_check_output.txt and go on to the next step.
The next step in recovering the missing files is to compile a complete list of the paths of the files that are missing.
1. Search the consistency check output for all occurrences of error «Record not Found.»
a. In Linux or Unix: Use this command to output the list of missing files to a file missing_ds_files.txt:
grep "Record not found:" consistency_check_output.txt | grep -Eo "[0-9a-f]{40}" | awk '{ print substr($1, 0,2) "/" substr($1, 3,2) "/" substr($1, 5,2) "/" $1 }' | sort -u > missing_ds_files.txt
** If your AEM instance is not starting up due to the «Record not Found» errors, then search your log files under crx-quickstart/logs for all occurrences of the error «Record not found» instead:
grep "Record not found:" error.log* | grep -Eo "[0-9a-f]{40}" | awk '{ print substr($1, 0,2) "/" substr($1, 3,2) "/" substr($1, 5,2) "/" $1 }' | sort -u > missing_ds_files.txt
If the command worked properly, then the contents of missing_ds_files.txt would look similar to the following:
12/92/04/129204a6dd0ce2cd5ca19c721b6f52ee2b3630e2 9f/d8/38/9fd8386d20cf55e7e0024e18d0c7d4e8400454ee 7a/13/15/7a1315788f45dafd6630454f04183601682a9f80 28/37/d2/2837d24aed3ff223cd40e90222226c4ef2e2a0c6
b. In Windows: Use a text editor such as Textpad or Notepad++ to find all occurrences of «Record not found.» Then, after finding all such occurrences, extract the filenames using a macro, writing a script or by manually copying and constructing the filenames in a new text file.
DataStore file paths are constructed from the record name in this format:
{first two chars of record id}/{second two chars of record id}/{third two chars of record id}/{record id}
For example, in this error:
error.log: org.apache.jackrabbit.core.data.DataStoreException: Record not found: 129204a6dd0ce2cd5ca19c721b6f52ee2b3630e2
the record id is 129204a6dd0ce2cd5ca19c721b6f52ee2b3630e2 and the file path is 12/92/04/129204a6dd0ce2cd5ca19c721b6f52ee2b3630e2
Now use the output from the last step to hunt down the same files in other AEM (CQ) instances in your environment. Since the datastore files are stored uniquely, you can copy them from other AEM instances in your environment.
If you cannot find some of the files in other instances, then search your backups and restore them from there if possible.
In Linux, you could log in to each of the working AEM instances and use a command like rsync to copy over any of the missing files that exist in them. For example, by running it from the datastore directory on the server that has the missing files:
rsync -avR --files-from=missing_ds_files.txt . user@hostname-of-server-missing-files:/path/to/crx-quickstart/repository/repository/datastore/
The command run an rsync that copies over any files listed in missing_ds_files.txt that exist in the server.
If you were not able to recover some of the files from backup or from other AEM (CQ) instances then clean up or fix the bad datastore references. Rerun the DataStore Consistency Check as we ran it in step 4. You get a current list of missing files.
Review each of the node paths listed which are referencing missing datastore files. Review any missing DAM assets or files uploaded to pages with your user. Have them reupload any missing ones they need. Any they don’t need can safely be deleted via the AEM user interface. If anything is missing from under /var/audit or /var/eventing can safely be deleted. For any files you are not sure about, then go here and contact the AEM support team for assistance.
I am having a problem with this library because this function returns false even when the given input is not in the database, when in fact it should return true.
type User struct {
ID uint `gorm:"primary_key"`
Username string `json:",omitempty"`
Password string `json:",omitempty"`
CreatedAt time.Time `json:",omitempty"`
}
b, err := db.Con()
if err != nil {
log.Panic(err)
}
defer db.Close()
// We want an empty struct
// Otherwise it will trigger the unique key constraint
user := []User{}
// Check if the username is taken
// BUX, MUST FIX: This always returns false for some reason
if db.Where(&User{Username: "MyUsername"}).Find(&user).RecordNotFound() == false {
fmt.Println("Username found")
}
Why is it always returning false, even when the string is empty?
asked Aug 28, 2018 at 21:01
3
Looks like .RecordNotFound(
) is removed from the SDK for some reason.
Now use this for handling record not found errors
dbRresult := userHandler.db.Where("email = ?", email).First(&user)
if errors.Is(dbRresult.Error, gorm.ErrRecordNotFound) {
// handle record not found
}
answered May 31, 2021 at 5:45
hushed_voicehushed_voice
3,0923 gold badges32 silver badges63 bronze badges
2
The following code should work as you expect it:
// We want an empty struct
user := User{} // We expect to have one (or no) user returned.
// Check if the username is taken
// Notice the use of First() instead of Find()
if !db.Where("username = ?", "MyUsername").First(&user).RecordNotFound() {
fmt.Println("Username found, here's the user:", user)
} else {
fmt.Println("Username not found")
}
As mkopriva already mentioned the ErrRecordNotFound
will not trigger when you’re working with slices.
Since you don’t need slices (your username should be unique) we can:
-
Reference not a slice of Users but a single User
User{}
instead of[]User{}
. -
Use
gorms
First()
method instead ofFind()
.
Duncan Jones
66.8k29 gold badges190 silver badges252 bronze badges
answered Aug 28, 2018 at 21:32
6
the type of both is not same, so you can add .Error() to make sure they are string
dbRresult := userHandler.db.Where("email = ?", email).First(&user)
if dbRresult.Error.Error() == gorm.ErrRecordNotFound.Error() {
// handle record not found
}
answered Jun 1 at 12:05
← →
iStat
(2003-04-17 06:33)
[0]
Народ, подскажите кого пинать. При выполнении
suc=Table1.Locate(«Code»,code,Options);
выдается ошибка «Record not found», а иногда «Record/key deleted».
Я думал, что функция Locate возвращает false если запись не найдена. Кто из нас не прав?
← →
ЮЮ
(2003-04-17 07:11)
[1]
Locate, действительно, возвращает false если запись не найдена, а «Record not found», «Record/key deleted».скорей всего, Exception-ы возбуждаемые при работе с таблицей, имеющей поврежденные индексы.
← →
АлексейК
(2003-04-17 07:27)
[2]
Синтасис правильный. Только наименование поля пишется в одинарных кавычках, т. е. «field_name», а не «field_name». А вот при поиске по пустому набору данных может возникнуть ошибка.
← →
iStat
(2003-04-17 08:58)
[3]
Набор данных однозначно не пустой, а вот с индексами скорей всего…
Восстановить индексы с помощью TUTIL32 — это реально?
← →
Anatoly Podgoretsky
(2003-04-17 09:15)
[4]
А у тебя Парадокс?
Тогда вполне реально, но можно и без него, с помощью DBD
← →
iStat
(2003-04-17 09:43)
[5]
Да, Paradox. А с помощью DBD как?
← →
alexLi
(2003-04-17 10:25)
[6]
Еще вариант. На том же файле открыта еще одна таблица и в ней,
например, удалена запись. Если на текущей Table1 не сделать Refresh, то результатом будут имеенно такие сообщения. С точки зрения Table1 нет записи соответствующей индексу, хотя индексы в порядке.
← →
Anatoly Podgoretsky
(2003-04-17 10:42)
[7]
iStat (17.04.03 09:43)
Там есть Restructure, в кочном удалить и пересоздать, самый действенный метод
← →
blackman
(2003-04-17 10:52)
[8]
>[D3]
Интересно, а что будет если с D1 попробовать ?
← →
iStat
(2003-04-17 11:14)
[9]
>alexLi
У меня сначала Query1 делает выборку из нескольких таблиц, в т.ч. и из той с которой связана Table1, затем
code=Query1.FieldByName(«Code»).AsInteger;
suc=Table1.Locate(«Code»,code,Options);
Это влияет на набор данных связанный с Table1?
← →
alexLi
(2003-04-17 11:58)
[10]
Не влияет, если только выборка, а не удаление или замена.
← →
iStat
(2003-04-17 13:58)
[11]
Ничего не понимаю!
Создал таблицы по новой с нуля, заполнил.
Создал новое приложение со строчками с выборкой и Locate.
Запускаю — работает.
Запускаю старое приложение — не работает.
Запускаю SQLExplorer, пишу «select * from таблица where code=111»
Выдает нужную строчку.
На что грешить? Куда еще копать? Или лучше BDE закопать…
← →
blackman
(2003-04-17 14:07)
[12]
>Или лучше BDE закопать…
Проще обновить или скачать полностью новое
Я же написал…
← →
Anatoly Podgoretsky
(2003-04-17 14:21)
[13]
iStat (17.04.03 13:58)
Дело не во внешней среде, у тебя два приложения одно работает, а другое нет, так что вывод сделай сам.
← →
iStat
(2003-04-17 14:28)
[14]
BDE у меня от 5 Delphi, это недостаточно новое?
← →
iStat
(2003-04-17 14:33)
[15]
>Anatoly Podgoretsky
Код-то одинаков и там и там
← →
Anatoly Podgoretsky
(2003-04-17 14:41)
[16]
Не верю, Станиславский.
При одинаковом коде не возможно различить программы, кроме как по имени.
← →
iStat
(2003-04-17 14:51)
[17]
Одинаковы не полностью, а только кусочки делающие одно и тоже
Когда вы используете различные онлайн-инструменты для проверки записи DMARC домена, вы можете столкнуться с одной из ошибок:
«No DMARC record found»
«DMARC record not found»
«Missing DMARC record»
«Unable to find DMARC record»
«No DMARC record published»
«Hostname returned a missing or invalid DMARC record»
«DMARC policy not enabled»
Любое из этих или подобных сообщений означает одно: проверка DMARC показывает, что ваш домен не защищен и подвергается спуфинговым атакам. Любой злоумышленник, использующий спуфинг, может отправлять вредоносные электронные письма с использованием вашего домена, что потенциально может нанести ущерб вашему бренду после попадания в почтовые ящики ваших клиентов.
Чтобы исправить это, вам нужно начать внедрять DMARC, который является ратифицированным отраслевым стандартом для проверки подлинности электронной почты, для вашего домена.
Что такое DMARC
DMARC расшифровывается как «Domain-based Message Authentication, Reporting & Conformance». Это протокол проверки подлинности электронной почты со встроенными функциями отчетности и применения политик. DMARC построен на основе двух других широко распространенных протоколов электронной почты, SPF и DKIM. DMARC проверяет результаты, возвращаемые SPF и DKIM, и определяет, проходит ли входящая электронная почта аутентификацию или нет, и, в зависимости от политики, указанной в записи DMARC, предпринимает определенные действия для предотвращения попыток злонамеренной подделки.
Вот визуальное представление о том, как работает DMARC, с сайта dmarc.org:
См. официальную спецификацию DMARC здесь: DMARC RFC7489.
Что такое запись DMARC
Запись DMARC — это запись типа TXT, опубликованная для домена в DNS владельцем или администратором домена. Когда принимающему почтовому серверу необходимо проверить входящую электронную почту по DMARC, он будет искать запись DMARC в домене, извлеченную из адреса электронной почты отправителя.
Запись DMARC определяет политику DMARC, которая применяется, когда электронная почта не проходит аутентификацию DMARC с использованием тега p, например, none (никаких действий), quarantine (переместить в спам) или reject (полностью отклонить электронное письмо).
Он также должен указать список получателей сводных отчетов DMARC, используя тег rua
. Таким образом, эти получатели смогут анализировать эти отчеты, выявлять потенциальные проблемы в инфраструктуре электронной почты и устранять их, если таковые имеются.
Вот пример записи DMARC:
v=DMARC1; p=quarantine; rua=mailto:[email protected]; ruf=mailto:[email protected];
Приведенная выше запись DMARC предписывает помещать в карантин сообщения электронной почты, не прошедшие проверку подлинности, сводные отчеты DMARC следует отправлять на адрес [email protected], а отчеты судебной экспертизы следует отправлять на адрес [email protected]
Как исправить «No DMARC Record Found»
Эту проблему легко исправить: нужно создать DMARC-запись с соответствующими настройками, опубликовать ее в DNS, а затем проверить.
Вот 3 шага, чтобы исправить «No DMARC Record Found».
1. Создать запись DMARC
Прежде чем мы сможем его опубликовать, используйте наш бесплатный DMARC record generator, чтобы создать запись DMARC.
2 вещи, чтобы отметить здесь. Во-первых, если вы внедряете DMARC впервые, скорее всего, вам нужно установить политику на none (p=none), что переводит DMARC в режим мониторинга. Это никоим образом не влияет на ваши потоки электронной почты, но позволяет вам получать отчеты DMARC, которые дают представление о вашем статусе аутентификации электронной почты.
Во-вторых, вы можете запросить у DMARC отправку сводных отчетов на почтовый ящик, к которому у вас есть доступ, указав тег rua
на этот почтовый ящик. Если вы используете DMARCLY’s dashboard для создания такой записи DMARC, она также настроит для вас почтовый ящик. Таким образом, вам не нужно беспокоиться о настройке почтового ящика и его обслуживании.
2. Опубликовать запись DMARC
DMARC работает, публикуя запись в DNS, чтобы она была доступна для принимающих почтовых серверов. После создания записи вам необходимо войти в панель управления DNS-провайдера домена, чтобы добавить запись.
Например, если ваш домен domain.com
размещен на Cloudflare, вам необходимо войти в Cloudflare.
Вот несколько ссылок на руководства по добавлению записи DMARC с различными службами DNS:
- Как добавить запись DMARC в Cloudflare
- Как добавить запись DMARC в Namecheap
- Как добавить запись DMARC в GoDaddy
- Как добавить запись DMARC в cPanel
3. Проверьте запись DMARC
После публикации записи вы можете использовать нашу бесплатную онлайн-проверку DMARC, чтобы убедиться, что она действительно находится в DNS и доступна для всех.
Describe the bug
On initialization, I get the error: ‘ERROR: Record Not Found’
To Reproduce
Just initializing the ConverseJS instance.
Expected behavior
No Javascript error.
Environment (please complete the following information):
- Desktop
- Chrome, Brave, Firefox
- Converse.js version 8.0.1
Additional context
My ConverseJS initialization:
Click to expand!
converse.initialize({
'view_mode' : 'overlayed',
'i18n' : 'fr',
'assets_path' : server path,
'sounds_path' : server path,
'play_sounds' : false,
'bosh_service_url' : own XMPP bosh server url,
'allow_logout' : false,
'auto_login' : true,
'auto_reconnect' : true,
'jid' : jid of the user,
'default_domain' : a default domain,
'domain_placeholder' : the default domain,
'password' : the user password on XMPP server,
'autocomplete_add_contact' : false,
'notification_icon' : __settings.notificationLogo,
'muc_domain' : 'conference.' + the default domain,
'locked_muc_domain' : 'hidden',
'muc_disable_slash_commands' : true,
'locked_muc_nickname' : true,
'nickname' : the nickname of the user,
'auto_register_muc_nickname' : true,
'notify_all_room_messages' : true,
'auto_join_on_invite' : false,
'roster_groups' : false,
'allow_adhoc_commands' : false,
'allow_contact_removal' : false,
'allow_contact_requests' : false,
'allow_registration' : false,
'show_controlbox_by_default' : false,
'discover_connection_methods' : false
});
LOGs with downloaded build:
log.js:70 2021-10-04T10:23:01.888Z DEBUG: Status changed to: ATTACHED
log.js:70 2021-10-04T10:23:01.889Z DEBUG: Attached
log.js:70 2021-10-04T10:23:01.889Z DEBUG: no requests during idle cycle, sending blank request
log.js:70 2021-10-04T10:23:01.891Z DEBUG: _throttledRequestHandler called with 1 requests
log.js:70 2021-10-04T10:23:01.891Z DEBUG: request id 1.0 posting
log.js:70 2021-10-04T10:23:01.891Z DEBUG: request id 1.0 state changed to 1
log.js:70 2021-10-04T10:23:01.892Z DEBUG: <body rid="2685660454" xmlns="http://jabber.org/protocol/httpbind" sid="eb3dcf3a7f5972d06bb1c6d7319db2ee12c6f0bb"/>
log.js:64 ERROR: Record Not Found
log @ log.js:64
error @ log.js:81
error @ bookmarks-list.js:28
Ks.t.error @ helpers.js:89
n @ storage.js:157
async function (async)
n @ storage.js:97
sync @ model.js:91
fetch @ model.js:293
initialize @ bookmarks-list.js:25
async function (async)
initialize @ bookmarks-list.js:13
connectedCallback @ element.js:45
k @ lit-html.ts:998
$ @ lit-html.ts:1019
_ @ lit-html.ts:1086
I @ lit-html.ts:986
v @ lit-html.ts:828
_ @ lit-html.ts:1081
I @ lit-html.ts:986
tl @ lit-html.ts:350
render @ controlbox.js:47
Ls @ events.js:283
Ds @ events.js:264
Os @ events.js:50
ks.trigger @ events.js:254
set @ model.js:208
set @ collection.js:162
e.success @ collection.js:498
n @ storage.js:152
async function (async)
n @ storage.js:97
sync @ collection.js:92
fetch @ collection.js:504
onConnected @ chatboxes.js:29
(anonymous) @ index.js:47
Ls @ events.js:281
Ds @ events.js:264
Os @ events.js:50
ks.trigger @ events.js:254
trigger @ core.js:229
Ym @ utils.js:151
Ls @ events.js:281
Ds @ events.js:264
Os @ events.js:50
ks.trigger @ events.js:254
trigger @ core.js:229
zm @ utils.js:13
success @ utils.js:27
e.success @ model.js:289
n @ storage.js:152
async function (async)
n @ storage.js:97
sync @ model.js:91
fetch @ model.js:293
Pm @ utils.js:26
(anonymous) @ index.js:46
Ls @ events.js:280
Ds @ events.js:264
Os @ events.js:50
ks.trigger @ events.js:254
trigger @ core.js:229
onConnected @ connection.js:161
async function (async)
onConnected @ connection.js:137
onConnectStatusChanged @ connection.js:277
_changeConnectStatus @ core.js:2394
_attach @ bosh.js:278
_restore @ bosh.js:316
restore @ core.js:1848
va.restoreBOSHSession @ bosh.js:90
async function (async)
va.restoreBOSHSession @ bosh.js:87
login @ core.js:314
async function (async)
login @ core.js:302
initialize @ core.js:915
async function (async)
initialize @ core.js:868
jl.initialize @ converse.js:51
initialize @ entry.js:31
With the CDN version, I get an other error before the one above detailed:
log.js:68 FATAL: Cannot read properties of undefined (reading 'call')
log @ log.js:68
fatal @ log.js:93
initialize @ index.js:121
async function (async)
initialize @ index.js:119
initialize @ core.js:899
async function (async)
initialize @ core.js:868
jl.initialize @ converse.js:51
initialize @ entry.js:31
I’m probably missing something, but I don’t see what.
Thank you by advance for your help.
Тестовый проект во вложении. Ошибка воспроизводится следующим образом:
1. Фильтруем первую колонку по значению «Value 1»;
2. Изменяем текст в первой колонке и нажимаем Enter;
3. Копируем ячейку, нажимая Ctrl+C, и получаем ошибку «Record not found».
После того как эта ошибка произошла, таблицей невозможно пользоваться: происходят ошибки ‘List index out of bounds’. Очистка фильтра не помогает. Пользователи говорят, что раньше такой ошибки не было и ячейки копировались без проблем.
Подробнее см. на картинке.
I have looked at many similar posts, but can’t seem to get rid of this record not found
error I get when trying to use my destroy
method. The two models in question are workouts.rb
and exercises.rb
. A workout has_many
exercises.
The error I’m getting is Couldn't find Workout without an ID
on the third line of the below code from my exercises_controller
:
def destroy
@workout = Workout.friendly.find(params[:workout_id])
exercise = @workout.exercises.find(params[:id])
My exercise.rb
model is:
class Exercise < ActiveRecord::Base
belongs_to :workout
belongs_to :user
has_many :reports
validates :user, presence: true
end
My workout.rb
model is:
class Workout < ActiveRecord::Base
extend FriendlyId
friendly_id :name, use: :slugged
belongs_to :user
has_many :exercises
has_many :reports
validates :user, presence: true
end
And my full exercises_controller
is:
class ExercisesController < ApplicationController
before_action :authenticate_user!
def index
@exercises = Exercise.all
end
def new
@exercise = Exercise.new
end
def create
@workout = Workout.friendly.find(params[:workout_id])
exercise = @workout.exercises.new(exercise_params)
exercise.user = current_user
if exercise.save
flash[:notice] = "Results saved successfully."
redirect_to [@workout]
else
flash[:alert] = "Results failed to save."
redirect_to [@workout]
end
end
def destroy
@workout = Workout.friendly.find(params[:workout_id])
exercise = @workout.exercises.find(params[:id])
if exercise.destroy
flash[:notice] = "Exercise was deleted successfully."
redirect_to [@workout]
else
flash[:alert] = "Exercise couldn't be deleted. Try again."
redirect_to [@workout]
end
end
private
def exercise_params
params.require(:exercise).permit(:name, :needs_seconds, :needs_weight, :needs_reps)
end
def authorize_user
exercise = Exercise.find(params[:id])
unless current_user == current_user.admin?
flash[:alert] = "You do not have permission to create or delete an exercise."
redirect_to [exercise.workout]
end
end
end
My routes are simple:
resources :workouts
resources :exercises
EDIT:
The code calling the deletion is:
<%= link_to "Delete #{exercise.name}", exercise_path, method: :delete, data: { confirm: 'Are you sure?' } %>
Any ideas where this error is coming from?
From the mxtoolbox website
DNS Record Published :
More Information About Dns Record Published
We did not find a DNS record published for this domain or hostname.
It means that your DNS setup is missing details, or perhaps that your
DNS update, if very recent, hasn’t finished propagating.
For more in-depth analysis, we would need to know your domain name.
You could get yourself perhaps more detailed error message by using
IntoDNS.
More tools can be found in
5 Online Tools to Check DNS Records.
answered Mar 21 at 18:48
harrymcharrymc
445k30 gold badges511 silver badges895 bronze badges
Stupid be: it was of course the DNS.
Yes, I have a complicated setup as some I self host under some subdomains (aliases) and I need DynamicDNS (provided by Dynu, which is also my registrar) while some other services, mail included, are hosted online. And while on my hoster the MX records were maintained, I did not thought that I need to maintain them also on my registrar. I had actually a wildcard A record and, this is my mistake, I thought this should be enough.
Solution: define MX record on the registrar. Problem Solved. Thank you all for the comments: they lead me in the right direction!
answered Mar 22 at 9:20
VladVlad
1137 bronze badges