Como fazer a instalação do gem no discourse-ai usar a fonte da imagem do gem modificada em web.china.template.yml?

Problema

Quando eu estava na China, queria mudar a fonte do espelho de gemas. No fork do discourse-ai, modifiquei as informações da fonte do espelho de gemas em Gemfile e gemfile. lock, mas o log ainda exibia o download de https://rubygems.org/. Como fazer com que a instalação de gemas no discourse-ai use a fonte de imagem de gemas modificada em web.china.template.yml?

Erros inevitáveis

sudo ./launcher rebuild app

I, [2023-11-10T04:40:17.388494 #1]  INFO -- : 
> cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate'
ERROR:  While executing gem ... (Gem::RemoteFetcher::FetchError)
    IOError: HTTP session not yet started (Gem::RemoteFetcher::FetchError)
        /usr/local/lib/ruby/site_ruby/3.2.0/rubygems/remote_fetcher.rb:266:in `rescue in fetch_path'
        /usr/local/lib/ruby/site_ruby/3.2.0/rubygems/remote_fetcher.rb:246:in `fetch_path'
        /usr/local/lib/ruby/site_ruby/3.2.0/rubygems/remote_fetcher.rb:294:in `cache_update_path'
        /usr/local/lib/ruby/site_ruby/3.2.0/rubygems/remote_fetcher.rb:161:in `rescue in download'
        /usr/local/lib/ruby/site_ruby/3.2.0/rubygems/remote_fetcher.rb:146:in `download'
        /usr/local/lib/ruby/site_ruby/3.2.0/rubygems/source.rb:212:in `download'
        /usr/local/lib/ruby/site_ruby/3.2.0/rubygems/resolver/specification.rb:113:in `download'
        /usr/local/lib/ruby/site_ruby/3.2.0/rubygems/resolver/specification.rb:99:in `install'
        /usr/local/lib/ruby/site_ruby/3.2.0/rubygems/request_set.rb:281:in `block in install_into'
        /usr/local/lib/ruby/site_ruby/3.2.0/rubygems/request_set.rb:273:in `each'
        /usr/local/lib/ruby/site_ruby/3.2.0/rubygems/request_set.rb:273:in `install_into'
        /usr/local/lib/ruby/site_ruby/3.2.0/rubygems/request_set.rb:148:in `install'
        /usr/local/lib/ruby/site_ruby/3.2.0/rubygems/commands/install_command.rb:215:in `install_gem'
        /usr/local/lib/ruby/site_ruby/3.2.0/rubygems/commands/install_command.rb:231:in `block in install_gems'
        /usr/local/lib/ruby/site_ruby/3.2.0/rubygems/commands/install_command.rb:224:in `each'
        /usr/local/lib/ruby/site_ruby/3.2.0/rubygems/commands/install_command.rb:224:in `install_gems'
        /usr/local/lib/ruby/site_ruby/3.2.0/rubygems/commands/install_command.rb:170:in `execute'
        /usr/local/lib/ruby/site_ruby/3.2.0/rubygems/command.rb:328:in `invoke_with_build_args'
        /usr/local/lib/ruby/site_ruby/3.2.0/rubygems/command_manager.rb:253:in `invoke_command'
        /usr/local/lib/ruby/site_ruby/3.2.0/rubygems/command_manager.rb:193:in `process_args'
        /usr/local/lib/ruby/site_ruby/3.2.0/rubygems/command_manager.rb:151:in `run'
        /usr/local/lib/ruby/site_ruby/3.2.0/rubygems/gem_runner.rb:56:in `run'
        /usr/local/bin/gem:12:in `<main>'
I, [2023-11-10T04:49:21.015453 #1]  INFO -- : gem install tokenizers -v 0.3.3 -i /var/www/discourse/plugins/discourse-ai/gems/3.2.2 --no-document --ignore-dependencies --no-user-install

Você está especificando a gem tokenizers em /var/www/discourse/plugins/discourse-ai/plugin.rb, mas ela não existe!
Procurou por:
- /var/www/discourse/plugins/discourse-ai/gems/3.2.2/specifications/tokenizers-0.3.3.gemspec
- /var/www/discourse/plugins/discourse-ai/gems/3.2.2/specifications/tokenizers-0.3.3-x86_64-linux.gemspec
- /var/www/discourse/plugins/discourse-ai/gems/3.2.2/specifications/tokenizers-0.3.3-x86_64-linux.gemspec


FAILED
--------------------
Pups::ExecError: cd /var/www/discourse &amp;&amp; su discourse -c 'bundle exec rake db:migrate' falhou com o retorno #&lt;Process::Status: pid 885 exit 255&gt;
Localização da falha: /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn'
exec falhou com os parâmetros {\"cd\"=&gt;\"$home\", \"hook\"=&gt;\"db_migrate\", \"cmd\"=&gt;[\"su discourse -c 'bundle exec rake db:migrate'\"]}}
bootstrap falhou com o código de saída 255
** FALHA AO INICIAR ** por favor, role para cima e procure por mensagens de erro anteriores, pode haver mais de uma.
./discourse-doctor pode ajudar a diagnosticar o problema.
7d6d7efb62fe5cd8f1d85af89fb43a28089d4d91449fec274758f1c5ba2a589d

sudo ./launcher bootstrap web_only, este erro é frequentemente encontrado

Por acaso você está na China?

Sim, existe alguma solução

Encontrei uma solução, o plugin baixado após a conversão da imagem gem para instalar a biblioteca dependente do plugin

          - gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
          - su discourse -c 'bundle config mirror.https://rubygems.org https://gems.ruby-china.com/'
          - gem install tokenizers -v 0.3.3 -i /var/www/discourse/plugins/discourse-ai/gems/3.2.2 --no-document --ignore-dependencies --no-user-install
          - gem install tiktoken_ruby -v 0.0.5 -i /var/www/discourse/plugins/discourse-ai/gems/3.2.2 --no-document --ignore-dependencies --no-user-install
          - gem install aws-eventstream -v 1.2.0 -i /var/www/discourse/plugins/discourse-ai/gems/3.2.2 --no-document --ignore-dependencies --no-user-install
1 curtida

É melhor trocar para um servidor externo, Orz, servidores domésticos não conseguem se conectar de forma alguma

Como

Se você está com pressa para construir um site, o tempo é mais importante que o dinheiro, se não estiver com pressa, pode brincar à vontade.

1 curtida

Obrigado pela solução, já foi resolvido. Adicionar isto na configuração *.yml também resolveu o problema de não conseguir baixar bibliotecas relacionadas devido ao site da biblioteca registry.yarnpkg.com não ter um certificado SSL válido.

    - exec:
        cd: $home
        cmd:
          - gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
          - bundle config mirror.https://rubygems.org https://gems.ruby-china.com/
          - gem install tokenizers -v 0.3.3 -i /var/www/discourse/plugins/discourse-ai/gems/3.2.2 --no-document --ignore-dependencies --no-user-install
          - gem install tiktoken_ruby -v 0.0.5 -i /var/www/discourse/plugins/discourse-ai/gems/3.2.2 --no-document --ignore-dependencies --no-user-install
          - gem install aws-eventstream -v 1.2.0 -i /var/www/discourse/plugins/discourse-ai/gems/3.2.2 --no-document --ignore-dependencies --no-user-install
          - yarn config set registry https://registry.npmmirror.com/ --global
          - grep -rl "registry.yarnpkg.com" . | tee ./find_cache.txt | xargs sed -i "s/registry.yarnpkg.com/registry.npmmirror.com/g" & && cat ./find_cache.txt & && rm ./find_cache.txt

ruby-china.com não é uma solução para tudo, você pode encontrar outros problemas mais tarde (eu tive um, parece que ruby-china.com não atualizou as dependências relevantes, o que causou um problema, mas não anotei os detalhes e não consigo me lembrar agora)
Falaremos sobre isso na época :no_mouth:

1 curtida

Existe de fato uma diferença entre os repositórios de pacotes espelhados acelerados e a versão oficial. Ao alternar para um repositório espelhado acelerado, como os da USTC, Tsinghua ou Alibaba, a versão da Tsinghua tem uma diferença menor, e a da USTC é a mais rápida. Meu servidor está em uma rede privada, e o servidor de rede pública é usado apenas para reencaminhamento de dados, o que reduz o custo geral. O custo do servidor é de 14 yuans por mês, com 2 núcleos (vCPU), 512 MB de RAM, 20 GB de armazenamento e largura de banda de 80 Mbps/s (pago conforme o uso).

Vejo que seu fórum é bom, parece ser relacionado à medicina. Nós criamos um fórum de tecnologia de computadores que integra o ChatGPT na China. Se tiver interesse, podemos autorizar o uso para você.

https://www.zeppos.tech/t/topic/7