Size: a a a

2022 January 30

D

Denis in Rust Async
если версию беты actix-web'а не фиксировать, то подтянется beta.21, но всё по-прежнему ок
источник

ИК

Иван Кривошеев... in Rust Async
Интересно, долго они ещё в бета будут жить...
источник

M

MUTbKA in Rust Async
Ну вот если версии не фиксировать, то будет вот так:
thread '<unnamed>' panicked at 'spawn_local called from outside of a task::LocalSet'
источник

M

MUTbKA in Rust Async
На SO много подобных тем, везде рекомендуют откатить версии...
источник

D

Denis in Rust Async
аа, т.е. несовместимость не на уровне api проявляется, а уже в рантайме
источник

D

Denis in Rust Async
хотя вообще странно это всё конечно
источник

C

ChzChz in Rust Async
thread 'main' panicked at '`spawn_local called from outside of a task::LocalSet`'
получаю ошибку такую, че не до конца понимаю почему так

есть обычный main функция
внутри нее
match command {
   "init" => startup::init_indexer(home_dir).expect("Couldn't init indexer"),
   "run" => startup::run_indexer(home_dir).expect("Couldn't run indexer"),
   _ => panic!("You have to pass `init` or `run` arg"),
}


и есть

#[tracing::instrument(
   name = "Run indexer",
   skip(home_dir),
   fields(id = %Uuid::new_v4())
)]
pub fn run_indexer(home_dir: PathBuf) -> crate::Result<()> {
   let mut config = get_config::<RunSettings>().expect("Couldn't run indexer");
   tracing::info!("Config was loaded");
   config.indexer.home_dir = home_dir;
     let sys = System::new();
   let indexer = Indexer::new(config.indexer);
   tracing::info!("Indexer was created and configured");
   sys.block_on(async move {
       let stream = indexer.streamer();
       actix::spawn(async {
           if let Err(e) = listen_blocks(stream).await {
               tracing::error!("`listen_blocks` is terminated with error: {:#}", e)
           }
       });
   });
   sys.run()?;

   Ok(())
}
источник

IB

Ivan Boldyrev in Rust Async
Не знаю, что там внутри того кода, нов выполняй всё внутри https://docs.rs/tokio/latest/tokio/task/struct.LocalSet.html
источник

MB

Mikail Bagishov in Rust Async
Да видимо опять версии актикса разъехались
источник

MB

Mikail Bagishov in Rust Async
System должен создавать локалсет (точнее даже набор локалсетов, привяханных к разным тредам), в котором потом другие компоненты актикса будут спавнить таски
источник
2022 February 02

C

ChzChz in Rust Async
народ я не шарю в базах данных подскажите вот я правильно сделал для вставки множества данных? использую sqlx
будут разные ивенты я должен их заматчить и вставить в нужную таблицу, в примере пока ток с одной таблицей но далее будет много

pub async fn insert_nft_events(events: Vec<Event>, db: &PgPool) -> Result<()> {
   
let mut tx = db.begin().await?;
   
for event in events {
       
let query = match event {
           Event::
Sale(sale) => {
               sqlx::query!(
                   r#"
                   INSERT INTO sales (id, prev_owner, curr_owner, token_id, price, date)
                   VALUES ($1, $2, $3, $4, $5, $6)
                   "#,
                   Uuid::new_v4(),
                   sale.prev_owner,
                   sale.curr_owner,
                   sale.token_id,
                   sale.price,
                   Utc::now()
               )
           }
       };

       query.execute(&
mut tx).await.map_err(|e| {
           tracing::error!("Failed to execute query: {:?}", e);
           e
       })
?;
   }
   tx.commit().
await?;

   
Ok(())
}
источник

K

Kitsu in Rust Async
Выглядит норм, транзакцию впрочем можно не открывать ради одного запроса
источник

DF

Dollar Føølish in Rust Async
PgPool в автокомите по дефолту?
источник

M

MUTbKA in Rust Async
В итоге выяснилось, что все работает - надо только правильно запустить всю actix-систему вместе с tokio (я это делал вручную). Теперь отдельный повод для любопытства - а как оно вообще работало до этого? А ведь работало и без проблем. :)
источник

d

diabolo in Rust Async
pool тут вообще непричем. постгрес, если ты не начал транзакцию вручную считает каждый отдельный query за отдельную транзакцию
источник

d

diabolo in Rust Async
там вроде может быть несколько запросов, судя по тому, что он пробегается циклом по events :)
источник