Quepid 使改进应用程序的搜索结果成为整个团队都能理解的可重复、可靠的工程过程。它涉及三个问题:
我们的合作很糟糕要在搜索领域取得全面进展需要深入的跨职能合作。发送电子邮件或在电子表格中跟踪搜索要求并不能解决问题。
搜索测试很困难搜索更改是跨领域的:大多数更改都会导致问题。测试很困难:您无法在每次相关性更改后运行数百次搜索。
迭代缓慢向前推进似乎是不可能的。为了避免倒退,进展缓慢。许多人干脆放弃搜索,剥夺了用户查找关键信息的手段。
要了解更多信息,请查看 Quepid 网站和 Quepid wiki。
如果您已准备好立即投入使用,则可以立即使用托管 Quepid 服务或按照安装步骤设置您自己的 Quepid 实例。
以下是与开发 Quepid 开源项目相关的信息,主要面向有兴趣扩展 Quepid 功能的人们!
从已构建的计算机进行配置大约需要 3 - 4 分钟。从头开始配置大约需要 20 分钟。
确保您已经安装了 Docker。转到此处 https://www.docker.com/community-edition#/download 了解安装说明。 Docker 应用程序已启动。
要使用brew安装,请按照下列步骤操作:
brew cask install docker
brew cask install docker-toolbox
注意:第一次尝试时您可能会收到有关信任 Oracle 的警告。打开系统偏好设置 > 安全和隐私,单击允许 Oracle 按钮,然后再次尝试安装 docker-toolbox
运行基于 Ruby 的本地设置脚本来设置 Docker 映像:
bin/setup_docker
如果您想创建一些具有 100 和 1000 次查询的案例,请执行以下操作:
bin/docker r bundle exec thor sample_data:large_data
这对于压力测试 Quepid 很有用!尤其是前端应用!
最后,要运行 Jupyter 笔记本,您需要运行:
bin/setup_jupyterlite
现在在 http://localhost 本地启动 Qupid:
bin/docker server
服务器可能需要一分钟的时间才能响应,因为它会在第一次调用时编译所有前端资源。
我们创建了一个帮助程序脚本来通过 docker 运行和管理应用程序,该脚本包含docker-compose
命令。您需要安装 Ruby。您仍然可以直接使用docker compose
,但对于基本内容,您可以使用以下命令:
bin/docker server
或bin/docker s
bin/docker bash
或bin/docker ba
bin/docker console
或bin/docker c
bin/docker run [COMMAND]
或bin/docker r [COMMAND]
bin/docker daemon
或bin/docker q
bin/docker destroy
或bin/docker d
bin/docker r rails test:frontend
bin/docker r rails test
在 foreman 下运行应用程序时,您只会看到请求日志,有关更详细的日志记录,请运行以下命令:
tail -f log/development.log
您可以运行三种类型的测试:
这些测试从 Rails 端运行测试(主要是 API 控制器和模型):
bin/docker r rails test
通过以下方式运行单个测试文件:
bin/docker r rails test test/models/user_test.rb
或者甚至通过传递行号在测试文件中进行单个测试!
bin/docker r rails test test/models/user_test.rb:33
如果您需要重置测试数据库设置,请运行:
bin/docker r bin/rake db:drop RAILS_ENV=test
bin/docker r bin/rake db:create RAILS_ENV=test
查看测试期间生成的日志 set config.log_level = :debug
在test.rb
中,然后通过以下方式尾部日志文件:
tail -f log/test.log
检查 JS 语法:
bin/docker r rails test:jshint
运行 Angular 端的测试。业力测试有两种模式:
bin/docker r rails karma:run
bin/docker r bin/rake karma:start
注意: karma 测试需要预编译资产,这会增加测试运行的大量时间。如果您仅对测试/规范文件进行更改,则建议您在监视模式下运行测试( bin/docker r bin/rake karma:start
)。需要注意的是,每当您对应用程序文件进行更改时,都必须重新启动该进程(或使用单次运行模式)。
要检查 Ruby 语法:
bin/docker r bundle exec rubocop
Rubocop 通常可以通过--autocorrect-all
自动更正遇到的许多 lint 问题:
bin/docker r bundle exec rubocop --autocorrect-all
如果有一个我们不喜欢的新“警察”规则,您可以将其添加到./rubocop.yml
文件中。
如果您想一次性运行所有测试(例如在提交和推送之前),只需运行以下两个命令:
bin/docker r rails test
bin/docker r rails test:frontend
由于某种原因,我们不能用一个命令同时运行这两个命令,尽管我们应该可以! 。
如果您想为用户创建大量查询以进行测试,请运行
bin/docker r bin/rake db:seed:large_cases
您将有两个用户[email protected]
和[email protected]
进行测试。
如果您想测试 Jupyterlite 笔记本,或使用“真实”案例和书籍,请运行
bin/docker r bundle exec thor sample_data:haystack_party
您将拥有来自 Haystack 评级方书籍和案例的大量用户数据可供使用。此数据来自公共案例 https://app.quepid.com/case/6789/try/12?sort=default 和 https://app.quepid.com/books/25
调试ruby通常要根据情况而定,最简单的方法是将对象打印到STDOUT:
puts object # Prints out the .to_s method of the object
puts object . inspect # Inspects the object and prints it out (includes the attributes)
pp object # Pretty Prints the inspected object (like .inspect but better)
在 Rails 应用程序中,您可以使用记录器进行输出:
Rails . logger object . inspect
如果这还不够,并且您想运行调试器,则可以使用debug
gem。请参阅 https://guides.rubyonrails.org/debugging_rails_applications.html#debugging-with-the-debug-gem。
此外,我们还提供了derailed
gem,它可以帮助您了解内存问题。
bin/docker r bundle exec derailed bundle:mem
运行应用程序时,您可以使用您最喜欢的工具调试 javascript,就像您一直这样做的方式一样。
javascript 文件将使用rails asset pipeline 连接成一个文件。
您可以通过在config/environments/development.rb
中切换以下标志来关闭它:
# config.assets.debug = true
config . assets . debug = false
到
config . assets . debug = true
# config.assets.debug = false
因为这个应用程序中有太多的 Angular JS 文件,并且在debug
模式下 Rails 会尝试单独加载每个文件,这会减慢应用程序的速度,并且在开发模式下等待脚本加载变得非常烦人。这就是它默认关闭的原因。
PS:更改配置后不要忘记重新启动服务器。
另请注意,文件secure.js
、 application.js
和admin.js
用于通过 Rails Asset 管道加载所有 JavaScript 和 CSS 依赖项。如果您正在调试 Bootstrap,那么您将需要单独的文件。因此,将//= require sprockets
替换为//= require bootstrap-sprockets
。
docker-compose.override.yml.example
可以复制到docker-compose.override.yml
并使用它来覆盖环境变量或在docker-compose.yml
中定义的开发过程中使用 splainer-search JS 库的本地副本。包括示例。只需使用本地结帐更新splainer-search
的路径即可! https://docs.docker.com/compose/extends/
该应用程序有两种运行脚本的方式: rake
和thor
。
Rake 非常适合执行依赖于应用程序环境的简单任务,以及 Rails 默认附带的默认任务。
而 Thor 是一个更强大的脚本编写工具,它比 Rake 更好地接受参数。
要查看哪些 rake 任务可用,请运行:
bin/docker r bin/rake -T
注意:使用bin/rake
可确保正在运行的rake
版本是锁定到应用程序Gemfile.lock
的版本(以避免与系统上可能安装的其他版本发生冲突)。这相当于bundle exec rake
。
您可能使用的常见 rake 任务:
# db
bin/docker r bin/rake db:create
bin/docker r bin/rake db:drop
bin/docker r bin/rake db:migrate
bin/docker r bin/rake db:rollback
bin/docker r bin/rake db:schema:load
bin/docker r bin/rake db:seed
bin/docker r bin/rake db:setup
# show routes
bin/docker r bin/rails routes
# tests
bin/docker r rails test
bin/docker r rails test:frontend
bin/docker r bin/rake test:jshint
查看可用任务:
bin/docker r bundle exec thor list
其他文档位于操作文档中。
您需要配置 Elasticsearch 以使用 CORS 接受来自浏览器的请求。要启用 CORS,请将以下内容添加到 elasticsearch 的配置文件中。通常,此文件位于config/elasticsearch.yml
中的 elasticsearch 可执行文件附近。
http.cors :
enabled : true
allow-origin : /https?://localhost(:[0-9]+)?/
在 wiki 上查看更多详细信息:https://github.com/o19s/quepid/wiki/Troubleshooting-Elasticsearch-and-Quepid
通常你会简单地做:
bin/docker r yarn add foobar
或者
bin/docker r yarn upgrade foobar
这将安装/升级 Node 模块,然后将该依赖项保存到package.json
。
然后签入更新的package.json
和yarn.lock
文件。
使用bin/docker r yarn outdated
来查看可以更新哪些软件包!!!!
通常你会简单地做:
bin/docker r bundle add foobar
这将安装新的 Gem,然后将该依赖项保存到Gemfile
。
您还可以通过以下方式升级Gemfile
中没有特定版本的 gem:
bin/docker r bundle update foobar
您可以通过以下方式删除宝石:
bin/docker r bundle remove foobar
然后签入更新的Gemfile
和Gemfile.lock
文件。为了更好地衡量,运行bin/setup_docker
。
要了解您是否有过期的 gem,请运行:
bin/docker r bundle outdated --groups
取消docker-compose.yml
中设置的注释- RAILS_RELATIVE_URL_ROOT=/quepid-app
,然后打开 http://localhost:3000/quepid-app。
这些步骤应该让您在本地启动并运行 Quepid 的生产版本(相对于开发人员版本)。
docker build -t o19s/quepid -f Dockerfile.prod .
第一次运行时可能会出错。如果发生这种情况,请重试
docker tag o19s/quepid o19s/quepid:$QUEPID_VERSION
docker compose up -d mysql
docker compose run --rm app bin/rake db:setup
通过更新应用程序image: o19s/quepid:10.0.0
将应用程序作为守护进程 (-d) 或活动容器启动
docker compose up [-d]
有一个目录.ssl
,其中包含用于 SSL 的密钥和证书文件。这是一个自签名生成的证书,仅供开发使用!
密钥/证书是使用以下命令生成的:
openssl req -new -newkey rsa:2048 -sha1 -days 365 -nodes -x509 -keyout .ssl/localhost.key -out .ssl/localhost.crt
PS:没有必要再做一次。
docker-compose.yml
文件包含使用这些证书的 nginx 反向代理。您可以通过 https://localhost 或 http://localhost 访问 Quepid。 (Quepid 仍可通过端口 80 上的 http 使用。)
在这里添加开发文档!
Keycloak 管理控制台的开发人员部署凭据是admin
和password
。
以下是生成迁移的示例:
bin/docker r bundle exec bin/rails g migration FixCuratorVariablesTriesForeignKeyName
接下来是bin/docker r bundle exec rake db:migrate
更改架构时,您还应该通过运行bin/docker r bundle exec annotations
来更新架构注释数据。
修改Gemfile
文件然后运行:
bin/docker r bundle install
您将看到更新的Gemfile.lock
,继续将其和Gemfile
检查到 Git 中。
我们使用 Angular 1 作为核心交互式应用程序,作为其中的一部分,我们对所有 UI 组件使用angular-ui-bootstrap
包。该软件包与 Bootstrap 版本 3 相关。
我们直接通过文件bootstrap3.css
导入 Bootstrap 3 CSS。
对于 Quepid 的其余部分,我们使用 Bootstrap 5!这是使用 NPM 通过package.json
包含的。请参阅admin.js
中的行//= require bootstrap/dist/js/bootstrap.bundle
。
我们目前使用 Rails Sprockets 来编译所有内容,但确实梦想转向 Propshaft,也许还有 js-bundling。
aller字体来自FontSquirrel,.ttf转换为.woff2格式。
运行./bin/setup_jupyterlite
以更新存档文件./jupyterlite/notebooks.gz
。这还会在./public/notebooks
目录中设置静态文件。但是,为了不签入数百个文件,我们会忽略 Github 中的该目录。在asset:precompile
时,我们解压./jupyterlite/notebooks.gz
文件。这适用于 Heroku 和生产 Docker 镜像。
要更新 Jupyterlite 的版本,请编辑Dockerfile.dev
和Dockerfile.prod
并更新pip install
版本。
问题? jupyterlite 在本地主机上工作吗???
请参阅这篇精彩的博客文章:https://keygen.sh/blog/how-to-implement-api-key-authentication-in-rails-without-devise/。
http://quepid-staging.herokuapp.com 站点有一个代码部署管道,在成功提交到main
时运行。
如果您有待处理的迁移,则需要通过以下方式运行它们:
heroku run bin/rake db:migrate -a quepid-staging
heroku restart -a quepid-staging
以下帐户是通过bin/setup_docker
进程创建的。它们都遵循以下格式:
email: quepid+[type]@o19s.com
password: password
其中类型是以下之一:
admin
:管理员帐户realisticActivity
:具有演示 Quepid 的各种案例的用户,包括 Haystack Rating Party 演示案例和书籍,并且是“OSC”团队的成员。100sOfQueries
:具有 100 个查询的 Solr 案例的用户(通常禁用)1000sOfQueries
:具有 1000 个查询的 Solr 案例的用户(通常禁用)oscOwner
:拥有团队“OSC”的用户oscMember
:属于“OSC”团队成员的用户查看数据映射文件以获取有关应用程序数据结构的更多信息。
通过bin/docker r bundle exec rake erd:image
重建 ERD
查看应用程序结构文件,了解有关 Quepid 结构的更多信息。
查看操作文档文件,了解如何为您的公司操作和配置 Quepid 的更多信息。
如果没有许多个人和组织的贡献,Quepid 就不可能实现。
具体来说,我们要感谢 Erik Bugge 和 Kobler 的工作人员为 Quepid 6.4.0 中发布的“唯一评级”功能提供资助。
Quepid 并不总是开源的!查看该项目贡献者列表的学分。
如果您想资助 Quepid 新功能的开发,请联系我们!