RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / user-287469

Total Pusher's questions

Martin Hope
Total Pusher
Asked: 2022-08-28 20:21:33 +0000 UTC

使用composer包将数组转换为字符串

  • 0

有这样一个数组

$data = [
    'payload' => [
        'key_1' => 'data-1',
        'key_2' => 'data-2',
        'key_3' => [
            'key_4' => 'data-3'
        ]
    ]
];

您需要将其转换为这一行:

payload[key_1]:data-1
payload[key_2]:data-2
payload[key_3][key_4]:data-3

这可以通过递归来完成。但我确信这已经有一些作曲家包。评论了很多。您能建议使用哪个软件包吗?

php
  • 1 个回答
  • 11 Views
Martin Hope
Total Pusher
Asked: 2022-07-02 18:28:50 +0000 UTC

phpunit.xml 文件中的 PHPUnit 覆盖变量

  • 0

phpunit.xml服务器变量在配置文件中定义:

<php>
        <server name="DB_CONNECTION" value="mysql"/>
</php>

因此,该值用于测试mysql:

echo (env('DB_CONNECTION')); // выводится mysql

我想通过控制台重新定义这个值,比如

DB_CONNECTION=sqlite phpunit

或者,既然使用了 Laravel,那么

DB_CONNECTION=sqlite artisan test

这两个选项都有效,但是 from 的值phpunit.xml具有更高的优先级,所以这不起作用。也许还有其他方法?从愿望 - 我不想改变phpunit.xml代码的其他部分,只是某种控制台解决方案。

laravel
  • 1 个回答
  • 10 Views
Martin Hope
Total Pusher
Asked: 2022-09-08 00:02:39 +0000 UTC

从镜像中间件运行容器

  • 0

我得到了最新版本的图像:

docker pull postgres:alpine

我得到这个日志:

alpine: Pulling from library/postgres
a0d0a0d46f8b: Already exists 
5034a66b99e6: Pull complete 
82e9eb77798b: Pull complete 
314b9347faf5: Pull complete 
2625be9fae82: Pull complete 
5ec8358e2a99: Pull complete 
2e9ccfc29d86: Pull complete 
2a4d94e5dde0: Pull complete

如何启动基于层的容器a0d0a0d46f8b?

类似的东西docker run -it --rm a0d0a0d46f8b bash。但这不是它的工作原理。

PS。我不提供通过标签获取版本的选项,因为实际上我需要一个没有标签的封闭企业映像的解决方案,这里 postgres 仅用作示例。

docker
  • 1 个回答
  • 10 Views
Martin Hope
Total Pusher
Asked: 2022-08-20 03:24:54 +0000 UTC

观察文件的变化并重新运行测试

  • 1

有项目源文件。我希望当它们在开发过程中发生变化时,测试将自动运行。

为此,我编写了以下脚本:

#!/bin/bash

WATCH_DIR=.

while read -r file date events; do

  if [[ "$file" =~ .*php$ ]]; then
    printf '\033[33m%*s\033[0m\n' $(tput cols) ' ' | tr ' ' '-'
    echo -e "\033[32m$date\033[0m"
    echo "$events" "$file"
    composer test
  fi

done < <(inotifywait -mqr --timefmt '%T' --format '%w%f %T %e' -e modify -e create -e delete -e move --exclude '\/(vendor|storage|cache)\/|.*\.sw[px]|.*~$' "$WATCH_DIR")

测试需要一些时间。如果在此期间文件再次更改,则测试将结束并重新开始。我不喜欢它。我希望终止当前的测试并在更改时重新启动。

怎么做?

bash
  • 1 个回答
  • 10 Views
Martin Hope
Total Pusher
Asked: 2022-04-30 14:40:51 +0000 UTC

Laravel 自定义验证规则

  • 0

我按照文档中的示例编写了自定义 TIN 检查规则。

它以这种方式使用:

"inn" => ["nullable", new Inn],

我想new Inn用单行条目替换它:

"inn" => "nullable|inn",

怎么做?现在抛出错误

Method Illuminate\Validation\Validator::validateInn does not exist.
laravel
  • 1 个回答
  • 10 Views
Martin Hope
Total Pusher
Asked: 2022-03-11 05:33:59 +0000 UTC

使用 PHP 控制台重启 docker 容器

  • 0

有时我需要强制一个进程重新读取它的配置,或者如果它是一个脚本,它的源代码。

我该怎么做:

  • Nginx: docker-compose exec nginx sh -c 'nginx -s reload'- Nginx 对此有一个特殊的信号
  • 无界:docker-compose exec dns sh -c 'unbound-control reload'
  • php-fpm: docker-compose exec php-fpm sh -c 'kill 1'- 只需杀死进程 PID 1 并docker-compose.yml设置重启策略restart: always,以便容器重启

等等。如果没有提供重读,那么它会有所帮助kill 1。

在这里我遇到了难以理解的行为:kill 1它不起作用。所以,按顺序。

有一个 docker 容器,其中执行控制台命令php /var/www/artisan queue:work --sleep=1,它保持与 Redis 的连接并处理队列。

我在这个容器中执行kill 1,没有任何反应。程序本身继续成功处理队列。

ps aux:

USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.1  0.1 183592 50544 ?        Ss   19:11   0:10 php /var/www/artisan queue:work --sleep=1

为什么会出现这样的情况?因为等待 I/O?还是忽略信号?

PS。当然,我可以使用 docker 重启容器。但我想知道为什么会这样。

php
  • 1 个回答
  • 10 Views
Martin Hope
Total Pusher
Asked: 2021-11-30 18:09:28 +0000 UTC

Laravel:运行 PHPUnit 测试时无法将标准输出重定向到文件

  • 1

问题:运行 PHPUnit 测试时无法将标准输出重定向到文件。怎么玩:

1. 创建测试

php artisan make:test StdoutTest --unit

测试内容:

<?php

namespace Tests\Unit;

use PHPUnit\Framework\TestCase;

class StdoutTest extends TestCase
{
    public function testExample()
    {
        die("ok");
    }
}

2.运行测试:

php artisan test --filter StdoutTest > dump.log

测试ok打印到控制台,但dump.log文件中没有任何内容。

  • 检查stderr,它是空的

可能是什么问题呢?

laravel
  • 1 个回答
  • 10 Views
Martin Hope
Total Pusher
Asked: 2021-11-02 14:22:20 +0000 UTC

类:同名静态和非静态方法

  • 0

声明同名的静态和非静态方法时有什么陷阱吗?它适用于所有现代浏览器吗?一般来说,是否允许这样做?参见示例:

class User {
    constructor() {
        this.name = "Name";
        this.surname = "Surname";
    }

    fi() {
        return "this: " + [this.name, this.surname].join(" ");
    }

    static fi(user) {
        return "static: " + [user.name, user.surname].join(" ");
    }
}

user = new User;
console.log(user.fi());
console.log(User.fi(user));
this: Name Surname
static: Name Surname
javascript
  • 2 个回答
  • 10 Views
Martin Hope
Total Pusher
Asked: 2020-09-06 18:52:51 +0000 UTC

在 Laravel 中为三个相关模型编写一个雄辩的请求

  • 0

几家公司参与投标,每家投标数次。然后在投标中确定中标。

任务:查找特定公司中标的所有标书。

招标 投标:id,bet_winner_id(链接到中标)

投注 : , (链接到投标), id(链接到公司)tender_idcompany_id

公司 :_id

class Tender extends Model
{
    /**
     * Все ставки
     * @return HasMany
     */
    public function bets()
    {
        return $this->hasMany(Bet::class, "tender_id", "id");
    }

    /**
     * Выигранная ставка
     * @return HasOne
     */
    public function winBet()
    {
        return $this->hasOne(Bet::class, "id", "bet_winner_id");
    }
}
class Bet extends Model
{
  /**
   * Тендер
   * @return HasOne
   */
  public function tender()
  {
      return $this->hasOne(Tender::class, "id", "tender_id");
  }

  /**
   * Компания
   * @return HasOne
   */
  public function company()
  {
      return $this->hasOne(Company::class, "id", "company_id");
  }
}
class Company extends Model
{
  /**
   * Ставки
   * @return HasMany
   */
  public function bets()
  {
      return $this->hasMany(Bet::class, "company_id", "id");
  }
}

我创建了一个这样的方法:

class Tender extends Model
{
  /**
   * Тендеры, в которых ставила компания
   * @param Builder $query
   * @param int $companyId
   * @param bool|null $isWin только выигрыш
   * @return Builder
   */
  public function scopeCompanyTakePartTenders(Builder $query, int $companyId, ?bool $isWin = null)
  {
      return $query->whereHas("bets", function ($q) use ($companyId, $isWin) {
          $q->where("company_id", "=", $companyId);
          $q->whereHas("tender", function ($q) use ($companyId, $isWin) {
              $q->where("tender.bet_winner_id", "=", "bet.id");
          });
      });
  }
}

但是,它不起作用,它count()返回零,尽管根据数据应该有一个明确的单位:

$id = $company->getKey();
$query = Tender::companyTakePartTenders($id)->toSql();
$cnt = Tender::companyTakePartTenders($id)->count(); // <---
dump("$id: $cnt");
dump($query);

查询是这样转储的:

select * from "tender" where exists
(select * from "bet" where "tender"."id" = "bet"."tender_id" and "company_id" = ? and exists
  (select * from "tender" where "bet"."tender_id" = "tender"."id" and "tender"."bet_winner_id" = ?
    and "tender"."deleted_at" is null
  )
) and "tender"."deleted_at" is null

我不明白为什么这段代码:

$q->where("tender.bet_winner_id", "=", "bet.id");

生成以下查询:

"tender"."bet_winner_id" = ?

如何正确编写代码?

laravel
  • 1 个回答
  • 10 Views
Martin Hope
Total Pusher
Asked: 2020-07-10 04:46:19 +0000 UTC

Ubuntu:为什么 USB 闪存驱动器上的“弹出”功能会留下损坏的文件

  • 0

我使用 Nautilus 将两部电影刻录到 USB 闪存驱动器,每部电影的大小约为 2 GB。

首先显示进度条,前几百兆几乎是瞬间写入,然后速度急剧下降。最后,进度条关闭。如果之后单击闪存驱动器图标并选择“弹出”,则会显示弹出“磁盘已成功弹出”。

在此处输入图像描述

但通常第二个文件会在中间的某个地方损坏。问:为什么?我希望操作系统刷新 I/O 缓冲区,然后才允许提取。如果你这样做sudo sync,没有问题。如果你不这样做,它会不断重复。

PS。Ubuntu 16.04

dmesg

[  656.566475] sd 4:0:0:0: Attached scsi generic sg2 type 0
[  656.567021] sd 4:0:0:0: [sdc] 15730688 512-byte logical blocks: (8.05 GB/7.50 GiB)
[  656.567986] sd 4:0:0:0: [sdc] Write Protect is off
[  656.567989] sd 4:0:0:0: [sdc] Mode Sense: 43 00 00 00
[  656.568893] sd 4:0:0:0: [sdc] No Caching mode page found
[  656.568899] sd 4:0:0:0: [sdc] Assuming drive cache: write through
[  656.573524]  sdc: sdc1
[  656.576879] sd 4:0:0:0: [sdc] Attached SCSI removable disk
[  666.791088] usb 2-1.2: USB disconnect, device number 4
[  669.984170] usb 2-1.2: new high-speed USB device number 5 using ehci-pci
[  670.095071] usb 2-1.2: New USB device found, idVendor=090c, idProduct=1000, bcdDevice=11.00
[  670.095074] usb 2-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  670.095076] usb 2-1.2: Product: Silicon-Power
[  670.095078] usb 2-1.2: Manufacturer: UFD 2.0
[  670.095079] usb 2-1.2: SerialNumber: 1402036101500139
[  670.095498] usb-storage 2-1.2:1.0: USB Mass Storage device detected
[  670.095862] scsi host4: usb-storage 2-1.2:1.0
[  671.506618] scsi 4:0:0:0: Direct-Access     UFD 2.0  Silicon-Power8G  1100 PQ: 0 ANSI: 0 CCS
[  671.507034] sd 4:0:0:0: Attached scsi generic sg2 type 0
[  671.507690] sd 4:0:0:0: [sdc] 15730688 512-byte logical blocks: (8.05 GB/7.50 GiB)
[  671.508541] sd 4:0:0:0: [sdc] Write Protect is off
[  671.508545] sd 4:0:0:0: [sdc] Mode Sense: 43 00 00 00
[  671.509438] sd 4:0:0:0: [sdc] No Caching mode page found
[  671.509446] sd 4:0:0:0: [sdc] Assuming drive cache: write through
[  671.515803]  sdc: sdc1
[  671.519015] sd 4:0:0:0: [sdc] Attached SCSI removable disk
[  699.075190] sd 4:0:0:0: [sdc] tag#0 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
[  699.075192] sd 4:0:0:0: [sdc] tag#0 Sense Key : Not Ready [current] 
[  699.075194] sd 4:0:0:0: [sdc] tag#0 Add. Sense: Medium not present
[  699.075196] sd 4:0:0:0: [sdc] tag#0 CDB: Read(10) 28 00 00 00 00 58 00 00 18 00
[  699.075198] blk_update_request: I/O error, dev sdc, sector 88 op 0x0:(READ) flags 0x80700 phys_seg 3 prio class 0
[  699.076443] sd 4:0:0:0: [sdc] tag#0 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
[  699.076444] sd 4:0:0:0: [sdc] tag#0 Sense Key : Not Ready [current] 
[  699.076446] sd 4:0:0:0: [sdc] tag#0 Add. Sense: Medium not present
[  699.076448] sd 4:0:0:0: [sdc] tag#0 CDB: Read(10) 28 00 00 00 00 78 00 00 38 00
[  699.076450] blk_update_request: I/O error, dev sdc, sector 120 op 0x0:(READ) flags 0x80700 phys_seg 7 prio class 0
[  699.078317] sd 4:0:0:0: [sdc] tag#0 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
[  699.078320] sd 4:0:0:0: [sdc] tag#0 Sense Key : Not Ready [current] 
[  699.078322] sd 4:0:0:0: [sdc] tag#0 Add. Sense: Medium not present
[  699.078323] sd 4:0:0:0: [sdc] tag#0 CDB: Read(10) 28 00 00 00 00 b8 00 00 90 00
[  699.078325] blk_update_request: I/O error, dev sdc, sector 184 op 0x0:(READ) flags 0x80700 phys_seg 18 prio class 0
[  699.079568] sd 4:0:0:0: [sdc] tag#0 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
[  699.079571] sd 4:0:0:0: [sdc] tag#0 Sense Key : Not Ready [current] 
[  699.079574] sd 4:0:0:0: [sdc] tag#0 Add. Sense: Medium not present
[  699.079576] sd 4:0:0:0: [sdc] tag#0 CDB: Read(10) 28 00 00 00 00 58 00 00 08 00
[  699.079579] blk_update_request: I/O error, dev sdc, sector 88 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0
[  699.079582] Buffer I/O error on dev sdc1, logical block 4, async page read
[  699.080831] sd 4:0:0:0: [sdc] tag#0 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
[  699.080832] sd 4:0:0:0: [sdc] tag#0 Sense Key : Not Ready [current] 
[  699.080834] sd 4:0:0:0: [sdc] tag#0 Add. Sense: Medium not present
[  699.080835] sd 4:0:0:0: [sdc] tag#0 CDB: Read(10) 28 00 00 00 00 b8 00 00 08 00
[  699.080837] blk_update_request: I/O error, dev sdc, sector 184 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0
[  699.080839] Buffer I/O error on dev sdc1, logical block 16, async page read
[  864.278331] usb 2-1.2: USB disconnect, device number 5
[ 4505.817188] usb 2-1.2: new high-speed USB device number 6 using ehci-pci
[ 4505.927791] usb 2-1.2: New USB device found, idVendor=090c, idProduct=1000, bcdDevice=11.00
[ 4505.927795] usb 2-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 4505.927797] usb 2-1.2: Product: Silicon-Power
[ 4505.927798] usb 2-1.2: Manufacturer: UFD 2.0
[ 4505.927800] usb 2-1.2: SerialNumber: 1402036101500139
[ 4505.928229] usb-storage 2-1.2:1.0: USB Mass Storage device detected
[ 4505.928574] scsi host4: usb-storage 2-1.2:1.0
[ 4507.418940] scsi 4:0:0:0: Direct-Access     UFD 2.0  Silicon-Power8G  1100 PQ: 0 ANSI: 0 CCS
[ 4507.419397] sd 4:0:0:0: Attached scsi generic sg2 type 0
[ 4507.420173] sd 4:0:0:0: [sdc] 15730688 512-byte logical blocks: (8.05 GB/7.50 GiB)
[ 4507.420999] sd 4:0:0:0: [sdc] Write Protect is off
[ 4507.421002] sd 4:0:0:0: [sdc] Mode Sense: 43 00 00 00
[ 4507.421896] sd 4:0:0:0: [sdc] No Caching mode page found
[ 4507.421904] sd 4:0:0:0: [sdc] Assuming drive cache: write through
[ 4507.428405]  sdc: sdc1
[ 4507.431647] sd 4:0:0:0: [sdc] Attached SCSI removable disk
[ 5421.829958] sd 4:0:0:0: [sdc] tag#0 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
[ 5421.829961] sd 4:0:0:0: [sdc] tag#0 Sense Key : Not Ready [current] 
[ 5421.829963] sd 4:0:0:0: [sdc] tag#0 Add. Sense: Medium not present
[ 5421.829966] sd 4:0:0:0: [sdc] tag#0 CDB: Read(10) 28 00 00 78 04 18 00 00 08 00
[ 5421.829969] blk_update_request: I/O error, dev sdc, sector 7865368 op 0x0:(READ) flags 0x80700 phys_seg 1 prio class 0
[ 5421.831829] sd 4:0:0:0: [sdc] tag#0 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
[ 5421.831832] sd 4:0:0:0: [sdc] tag#0 Sense Key : Not Ready [current] 
[ 5421.831834] sd 4:0:0:0: [sdc] tag#0 Add. Sense: Medium not present
[ 5421.831837] sd 4:0:0:0: [sdc] tag#0 CDB: Read(10) 28 00 00 78 04 18 00 00 08 00
[ 5421.831839] blk_update_request: I/O error, dev sdc, sector 7865368 op 0x0:(READ) flags 0x0 phys_seg 8 prio class 0
[ 5421.831843] Buffer I/O error on dev sdc1, logical block 7865312, async page read
[ 5421.831845] Buffer I/O error on dev sdc1, logical block 7865313, async page read
[ 5421.831847] Buffer I/O error on dev sdc1, logical block 7865314, async page read
[ 5421.831849] Buffer I/O error on dev sdc1, logical block 7865315, async page read
[ 5421.831850] Buffer I/O error on dev sdc1, logical block 7865316, async page read
[ 5421.831852] Buffer I/O error on dev sdc1, logical block 7865317, async page read
[ 5421.831853] Buffer I/O error on dev sdc1, logical block 7865318, async page read
[ 5421.831855] Buffer I/O error on dev sdc1, logical block 7865319, async page read
[ 5429.178684] usb 2-1.2: USB disconnect, device number 6
[ 5431.780821] usb 2-1.2: new high-speed USB device number 7 using ehci-pci
[ 5431.891402] usb 2-1.2: New USB device found, idVendor=090c, idProduct=1000, bcdDevice=11.00
[ 5431.891405] usb 2-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 5431.891407] usb 2-1.2: Product: Silicon-Power
[ 5431.891408] usb 2-1.2: Manufacturer: UFD 2.0
[ 5431.891410] usb 2-1.2: SerialNumber: 1402036101500139
[ 5431.891867] usb-storage 2-1.2:1.0: USB Mass Storage device detected
[ 5431.892187] scsi host4: usb-storage 2-1.2:1.0
[ 5433.361870] scsi 4:0:0:0: Direct-Access     UFD 2.0  Silicon-Power8G  1100 PQ: 0 ANSI: 0 CCS
[ 5433.362263] sd 4:0:0:0: Attached scsi generic sg2 type 0
[ 5433.363053] sd 4:0:0:0: [sdc] 15730688 512-byte logical blocks: (8.05 GB/7.50 GiB)
[ 5433.363954] sd 4:0:0:0: [sdc] Write Protect is off
[ 5433.363958] sd 4:0:0:0: [sdc] Mode Sense: 43 00 00 00
[ 5433.364903] sd 4:0:0:0: [sdc] No Caching mode page found
[ 5433.364921] sd 4:0:0:0: [sdc] Assuming drive cache: write through
[ 5433.369906]  sdc: sdc1
[ 5433.373265] sd 4:0:0:0: [sdc] Attached SCSI removable disk

mtab:

/dev/sdc1 /media/hostel/2571E5907D95FE34 fuseblk rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions,allow_other,blksize=4096 0 0
ubuntu
  • 1 个回答
  • 10 Views
Martin Hope
Total Pusher
Asked: 2020-05-17 19:04:26 +0000 UTC

将两个分区映像文件合并为一个磁盘映像并使其可启动

  • 2

我想img从两个分区映像文件(也img)创建一个磁盘映像作为文件。然后将其转换为vdi- 将整个系统引导到 VirtualBox 的映像 - 我知道如何执行此项目(VBoxManage convertdd disk.img disk.vdi)。

为了更清楚,我会这样写:

有一个带有工作系统的磁盘,该系统作为运行 Proxmox 的来宾工作:

df -h
...
/dev/sdb1       225M  140M   73M  66% /boot
/dev/sdb3        28G   21G  5,2G  81% /

从视觉上看,磁盘如下所示:

磁盘

fdisk /dev/sdb: 50.5 GB, 50465865728 bytes, 98566144 sectors
Units = sectors of 1 * 512 = 512 Bytes
...
Disk label type: dos
Disk indentifier: 0x2fda227d

   Device   Boot  Start      End         Blocks     Id    System
/dev/sdb1   *     2048       503807      250880     83    Linux
/dev/sdb3         34605056   93143039    29268992   83    Linux

我从 Live-CD 启动并通过了两个图像文件Create Partition Image- 用箭头表示。一个是可引导的,grub另一个是系统的其余部分:

  • boot.img- 可启动
  • base.img- 系统

现在我想收集一个img文件,我可以将其转换为 VirtualVox 格式vdi(我可以这样做)。

在这里,我找到了一个动作算法,但实验不成功,问题也随之而来。

我看到这样的问题的解决方案:

  • img通过创建一个空文件fallocate -l 40G desc.img
  • 通过fdisk创建两个分区,bootable为第一个放置一个标志
  • 破解磁盘losetup -f --show desc.img,记住设备号/dev/loopY
  • 做kpartx -a /dev/loopY
  • dd boot.img同时做base.img适当的/dev/loopYp1和/dev/loopYp1

恐怕这行不通,因为我不完全理解这个过程。还:

  • 我不知道是否需要创建 MBRdd if=/usr/lib/syslinux/mbr.bin of=/dev/loopY conv=notrunc以及从哪里获取它(这不是在原始系统上,我可以从另一个系统中获取它并“完成它”)?还是boot.img图像中已经有 MBR?
  • 在原盘中,系统位于其他扇区,能否/boot找到系统?
  • 我该如何诊断,问题是如果我将最后一个vdi插入 VirtualBox,但它不会启动并显示没有启动磁盘的消息。还是只是黑屏?
  • 如果您仅从boot.img(boot.vdi=>/dev/sda在客户机中)创建启动映像,base.img并将其作为第二个磁盘(base.vdi=>/dev/sdb在客户机中)连接,系统是否能够启动到 VirtualBox?实验中复制30GB需要很长时间,我想排除这一步。

UPD。

为未来的映像分配了 40 GB:

fallocate -l 40G dest.img

然后:

fdisk dest.img
n
p
1
2048
513807 (тут я немного накинул на всякий случай)

n
p
2
514048 (по-умолчанию)
83886079 (по-умолчанию)

p
Устр-во    Загрузочный  Start Конец Секторы   Size Id Тип
dest.img1  *             2048   513807   511760 249,9M 83 Linux
dest.img2              514048 83886079 83372032  39,8G 83 Linux
w

然后

losetup -f --show dest.img
# получилось /dev/loop6
kpartx -a /dev/loop6

然后复制了这些部分:

dd if=boot.img of=/dev/mapper/loop6p1 conv=notrunc
dd if=base.img of=/dev/mapper/loop6p2 conv=notrunc

然后尝试卸载losetup -d /dev/loop6但losetup -l仍然显示/dev/loop6。

然后我对其进行了转换VBoxManage convertdd dest.img dest.vdi,并查看了 Live CD - 有一个磁盘,一切似乎都很好,但尝试从它启动会给出no bootable media....

UPD2。

mkdir ./boot
mount /dev/loop6 ./boot
grub-install --recheck --boot-directory=./boot /dev/loop6
# Установка для платформы i386-pc.
# Установка завершена. Ошибок нет.

resize2fs /dev/mapper/loop6p1
# The filesystem on /dev/mapper/loop6p1 is now 63970 (4k) blocks long.

kpartx -r /dev/loop6
# loop6p1 : 0 511760 /dev/loop6 2048
# loop6p2 : 0 83372032 /dev/loop6 514048

losetup --detach /dev/loop6

启动后,系统进入 grub 引导程序:

grub >

我做错了什么...

UPD3。

重新排列grub几次,这里是主要实验

第一次重新安装 grub - 从我的 Ubuntu 16.04 机器

losetup --partscan /dev/loop8 ./dest.img

然后grub-install是其余的步骤。

转成VBox镜像并启动后,提示找不到启动盘no such device: (guid диска /dev/sda1 - это то что раньше было в boot.img)。

我从 LiveCD 启动,使用这样的 guid 磁盘存在,这就是以前的boot.img位置和 grub 所在的位置。团队

grub rescue > ls
(hd0) # тут выводится только это

第二次 grub 重新安装 - 在 VBox 内

从 VirtualBox (CentOS 7.8) 内的 LiveCD 启动。然后我根据 grub 恢复说明进行了操作:

mount /dev/sda2 /mnt
mount /dev/sda1 /mnt/boot
mount --bind /dev /mnt/dev; mount --bind /sys /mnt/sys; mount --bind /proc /mnt/proc
chroot /mnt /bin/bash

然后grub-install --recheck /dev/sda。安装程序发出警告说没有/dev/sda3(以前有系统,现在有/dev/sda2)。重新启动时,将显示 grub 屏幕:

(Добро пожаловать в Граб версии 0.97 ... нажмите Tab для списка команд)
grub >

通过按cd /+ Tab,我意识到有一个目录/grub/和文件/initramfs-...,vmlinuz-2.6- 即/boot,但没有根文件系统。

然后我又做了一遍,但是当我编辑文件/etc/mtab时,我将根挂载更改/dev/sda3为/dev/sda2,grub-install它不再产生警告。

系统仍然没有启动。最后搞清楚是怎么回事,创建了一个配置文件/boot/grub/grub.conf,把之前在实验中删掉的内容放进去(我彻底删掉了/grub)。

系统开始启动。

linux
  • 1 个回答
  • 10 Views
Martin Hope
Total Pusher
Asked: 2020-04-17 14:57:43 +0000 UTC

如何从 Ubuntu 中删除 Postman?

  • 0

我很久以前在 Ubuntu 中安装了 Postman,现在我想删除它。我不记得我是怎么设置的。邮递员可从 HUD 菜单中获得。Postman 本身就像一个 chrome 应用程序

尝试了这些方法,但它们不起作用:

  • HUD菜单中没有“删除”
  • sudo whereis postman, sudo whereis Postman- 空
  • 启动后我做ps aux | grep -i postman | grep -v grep- 空(作为 chrome 应用程序)
  • cd /; sudo find -iname postman发出了两个目录~/.config/Postman,~/Postman我清除了它们,但 Postman 仍然在 HUD 菜单中并成功地从它启动

如何正确查找和删除?

ubuntu
  • 1 个回答
  • 10 Views
Martin Hope
Total Pusher
Asked: 2020-03-25 16:25:40 +0000 UTC

在 Laravel 中本地化 VueJS 组件

  • 1

Laravel 有一个像这样工作的本地化包(PHP):

echo __('I love programming.');

以及如何做同样的事情,但对于基于 VueJS 构建的组件?我使用标准的盒装解决方案 - Laravel MIX。

我想要这样的东西:

<template>
    <div class="alert alert-danger alert-dismissible">
        <button type="button" class="close" aria-hidden="true" title="{% RELOAD %}" @click="$emit('reload')"><i class="fas fa-sync"></i></button>
        <h5 v-if="title"><i class="icon fas fa-ban"></i> {{ title }}</h5>
        {{ message }}
    </div>
</template>

<script>
    export default {
        props: ["title", "message"]
    }
</script>

在这里,{% RELOAD %}我放置了替换文本,它应该从本地化文件中提取。

UPD{{ title }}和{{ message }}都是取自属性,不需要翻译。

laravel
  • 2 个回答
  • 10 Views
Martin Hope
Total Pusher
Asked: 2020-03-03 18:28:36 +0000 UTC

使用 userParams 从 Yandex Metrica 获取数据

  • 1

用户参数被传输到 Yandex Metrika userParams:

{
  "partner_name": "Тестовый партнер",
  "partner_guid": "551d7b62-8892-12d9-aa79-605054503031",
  "user_id": "1",
  "user_roles": [
    "Менеджер",
    "Логист",
    "Бухгалтер"
  ]
}

任务是在构建报告时使用这些参数 ( userParams) 进行分组和过滤。

收集、验证数据。现在的问题是:如何通过指标 API 过滤/获取/分组此类数据?例如,获取测试合作伙伴访问的总数(partner_name或partner_guid)。或者获取“原始”数据,其中存储在深度中的度量将被放下userParams以进行独立处理。

或许这是做不到的。我在文档中找到了一个参数列表,其中没有,虽然有ym:s:paramsLevel1,但我不确定它是什么。

对于调试,我使用这样的脚本,请参阅我的尝试filters::

"use strict";

const
  querystring = require('querystring'),
  https = require('https')
  ;

let params = {
  access_token: "****************", // мой токен
  counter: "0000000" // номер счетчика
}

let analyticsParams = {
  "ids": `${params.counter}`,
  // filters: "EXISTS(ym:s:paramsLevel1=='userParams')", // возвращает ноль
  // filters: "EXISTS(ym:s:paramsLevel1=='partner_guid')",  // возвращает ноль
  // filters: "EXISTS(ym:s:paramsLevel1=='partner_guid' AND ym:s:paramsLevel2=='551d7b62-8892-12d9-aa79-605054503031')",  // возвращает ноль
  // filters: "EXISTS(ym:pv:URL=='login')", // возвращает ноль, почему?
  filters: "ym:s:trafficSource=='organic'", // работает
  "metrics": [
    "ym:s:visits"
  ],
  dimensions: [ "ym:s:browser" ]
};


let getOptions = {
  host: 'api-metrika.yandex.net',
  port: '443',
  path: '/stat/v1/data/?' + querystring.stringify(analyticsParams),
  headers: {
    "Content-Type": "application/x-yametrika+json",
    "Authorization": `OAuth ${params.access_token}`
  }
}

console.log(getOptions);


function getData() {
  return new Promise((resolve, reject)=> {

    https.get(getOptions, (resp) => {
      let data = '';

      resp.on('data', (chunk) => {
        data += chunk;
      });

      resp.on('end', () => {
        data = JSON.parse(data);

        if(data.error) {
          console.log("Error", data.error);
          reject(new Error(data.error));
          return;
        }

        resolve(data);
      });

    }).on("error", (err) => {
      reject(new Error('Произошла ошибка: ' + err.message));
    });

  });
}

let run = async () => {
  try {
    let data = await getData();
    console.log("----------- resilts -----------");
    console.log(JSON.stringify(data));
    console.log();
    console.log(data.data);
  } catch (e) {
    console.log(e);
  }
}

run();
node.js
  • 1 个回答
  • 10 Views
Martin Hope
Total Pusher
Asked: 2020-01-24 03:55:28 +0000 UTC

如何通过wireshark查看docker中的包

  • 0

背景。

有一个“dns”容器,其中正在运行缓存 dns 解析器unbound。我想从另一个“api”容器中抓取特定区域(“site.com”)的数据。

为此,“dns”解析器有一个unbound-control这样调用的实用程序:

unbound-control flush_zone site.com.

还有一个端口8953用于远程控制守护程序。

我想flush_zone site.com.从另一个容器调用命令。尝试这样做:

/srv # telnet dns 8953
Connected to dns
flush_zone site.com.
Connection closed by foreign host

我没有收到清除区域的结果。

当然,理论上,您需要将该实用程序unbound-control放在第二个“api”容器中,并使用其通过网络进行管理的能力。但我不想将另一个包拖到容器中。

因此,我想知道需要将什么发送到 dns:8953 以便清除缓存。unbound-control我没有找到任何协议信息。我无法弄清楚排序。所以我决定嗅探这些包裹。

那么,如何在 docker 容器中从命令行运行 wireshark 以监听 8953 端口,然后查看调用实用程序时那里发送的内容?

docker
  • 2 个回答
  • 10 Views
Martin Hope
Total Pusher
Asked: 2020-12-18 22:14:00 +0000 UTC

创建一个在两个不同容器中可读写的套接字

  • 1

从 docker-compose.yml 中提取了两个容器(删节):

version: '3'
services:

  nginx:
    image: nginx:alpine
    volumes:
      - sockets:/srv/unix-sockets

  php54-fpm:
    image: php:5.4-fpm
    volumes:
      - sockets:/srv/unix-sockets

volumes:
  sockets:

php-fpm创建一个套接字/srv/unix-sockets/php54-fpm.sock,这在nginx.

让我们看看里面的权利php-fpm:

ls -la /srv/unix-sockets/php54-fpm.sock
srw-rw---- 1 root root 0 Dec 18 16:59 /srv/unix-sockets/php54-fpm.sock

套接字是以 root 身份创建的,因为此服务以该用户身份运行。好的,让我们更改所有者:

chown www-data:www-data /srv/unix-sockets/php54-fpm.sock

现在我们进入容器nginx并检查权限:

ls -la /srv/unix-sockets/php54-fpm.sock
srw-rw----    1 xfs      xfs              0 Dec 18 16:59 /srv/unix-sockets/php54-fpm.sock

xfs!!!好的,这是不言自明的:

nginx:

id xfs
uid=33(xfs) gid=33(xfs) groups=33(xfs),33(xfs)

php-fpm:

id www-data 
uid=33(www-data) gid=33(www-data) groups=33(www-data)

原来socket的所有者的uid是一样的,在不同的容器中socket属于不同的用户。

但是由于这种行为,工人nginx看不到套接字,error_log这属于:

2019/12/18 16:52:23 [crit] 8#8: *3 connect() to unix:/srv/unix-sockets/php54-fpm.sock failed (13: Permission denied) while connecting to upstream, client: 88.888.88.88, server: localhost, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/srv/unix-sockets/php54-fpm.sock:", host: "77.777.77.77"

有这样的选择:

  • 在容器中强制更改/创建具有相同 uid 的 www-data 用户(看起来像拐杖)
  • 更改套接字的权限chmod o+rw(也是马马虎虎)
  • 其他一些选择

如何正确解决这个问题?

docker
  • 1 个回答
  • 10 Views
Martin Hope
Total Pusher
Asked: 2020-07-26 21:36:09 +0000 UTC

Excel:将间隔按月组合成一个单元格并在其上进行自动过滤

  • 0

有一个假期时间表,每个员工在 2020 年有三个假期 - 三个间隔。

例如,

[АБ]  [10.01.2020][23.01.2020]  [01.07.2020][14.07.2020]  [01.12.2020][07.12.2020]
[ВГ]  [15.04.2020][28.04.2020]  [01.09.2020][14.09.2020]  [15.10.2020][21.10.2020]

每个日期都在一个单独的单元格中。

您需要按月制作一个自动过滤器。例如,我们选择了 9 月,只有 9 月有假期的员工留在页面上(本例中为“VG”)。

正如我所看到的解决方案:制作某种单元格,列出员工的所有假期月份。并以某种方式为这种情况制作一个自动过滤器。

适合任何选择。也许写一个宏。

excel
  • 1 个回答
  • 10 Views
Martin Hope
Total Pusher
Asked: 2020-07-09 15:00:22 +0000 UTC

是否有用于从 hub.docker.com 集线器获取图像信息的 API

  • 0

有hub.docker.com,它有 2,418,215 个图像。

目的:为了对图像进行理智的搜索,因为他们的搜索不适合我,我已经在这里问了一个问题

如我所见:使用一些 API(我正在寻找)下载图像上的所有元信息(作者、自述文件、星数等),将其驱动到数据库中并进行搜索。至少,我想添加属性“有一个README.md”,“github上有一个存储库” - 这两个参数将过滤掉不清楚如何使用的内容。

是否有类似的 API、文档?

docker
  • 1 个回答
  • 10 Views
Martin Hope
Total Pusher
Asked: 2020-06-05 15:32:43 +0000 UTC

从浏览器下载动态表格到 Excel 文件

  • 2

浏览器中有一个使用 VueJS 构建的 HTML 表格,需要以 Excel 格式下载。这应该是一个相当通用的解决方案,可以扩展到多种表格。

这些选项不适合:

  • 伪装下载html.xlsx
  • 该表是在浏览器中使用过滤器构建的,因此服务器端生成PHPExcel不适合-您将必须在浏览器中通过JS进行过滤,在服务器上通过PHP进行过滤,甚至支持构建代码“单元格A1,写下来。 ..” - 并且有很多表,重构所有不可能的东西,只进行最少的更改
  • 一个现成的 JS-liba,可以建表并下载 Excel。表已经用 VueJS 建好了,可以改,但是不能放弃 VueJS

特点:桌子有一点装饰,比如标签<span>。

如何以最简单的方式做到这一点?有这样的想法:

  • 我们以字符串的形式获取内容<table>..</table>,将其发送到服务器,并且它已经构建了 Excel(PHP、NodeJS 等)。但是怎么做?
  • 某种可以被“煽动”的 JS 库<table>

表格示例:

"use strict";

var nsReport = new Vue({
  el: "#js-ns-report",
  data: {
    atLeastOneTender: true,
    items: [{
        skuArticul: "ABB-101",
        _selected: true,
        skuName: "",
        RequestNumber: "-",
        orderNumber: "-",
        specificProduct: "-",
        deliveryPointName: "-",
        deliveryPointAddress: "-",
        tender: "-",
        remainDemand: "-",
        freeStock: "-",
        status: "В процессе"
      },
      {
        skuArticul: "BDN-16",
        _selected: true,
        skuName: "",
        RequestNumber: "-",
        orderNumber: "-",
        specificProduct: "-",
        deliveryPointName: "-",
        deliveryPointAddress: "-",
        tender: "-",
        remainDemand: "-",
        freeStock: "-",
        status: "В процессе"
      },
      {
        skuArticul: "YML-9",
        _selected: true,
        skuName: "",
        RequestNumber: "-",
        orderNumber: "-",
        specificProduct: "-",
        deliveryPointName: "-",
        deliveryPointAddress: "-",
        tender: "-",
        remainDemand: "-",
        freeStock: "-",
        status: "В процессе"
      }
    ]
  }
});
.table {
  margin-top: 20px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">

<div id="js-ns-report">

  <div class="btn btn-primary" @click="atLeastOneTender = !atLeastOneTender">Скрыть/показать колонку</div>
  <div class="btn btn-default">Скачать в Excel</div>

  <table class="table table-bordered ns-table">
    <thead>
      <tr>
        <th rowspan="2">
          <label for="select-row-all" class="custom-control custom-checkbox" title="Выделить все / снять выделение" style="display: inline-block;">
					<input type="checkbox" class="custom-control-input" id="select-row-all">
					<span class="custom-control-indicator"></span>
					&nbsp;
				</label> Артикул
        </th>
        <th rowspan="2">
          Название
        </th>
        <th rowspan="2">Заявка</th>
        <th rowspan="2">
          Счет
        </th>
        <th rowspan="2">
          Заказная продукция
        </th>
        <th rowspan="2">Грузополучатель</th>
        <th rowspan="2">Адрес доставки</th>
        <th rowspan="2" v-if="atLeastOneTender">
          Тендер
        </th>
        <th colspan="2" class="text-center">Остаток</th>
        <th rowspan="2" class="text-center">
          Статус
        </th>
      </tr>
      <tr>
        <th>спроса</th>
        <th>свободный</th>
      </tr>

    </thead>
    <tbody>
      <tr v-for="(row, idx) in items">
        <td class="nowrap-ellipsis">
          <label :for="'select-row-' + idx" class="custom-control custom-checkbox" style="display: inline-block;">
					<input type="checkbox" class="custom-control-input"
						:id="'select-row-' + idx"
						v-model="row._selected">
						&nbsp;
					<span class="custom-control-indicator"></span>
				</label> {{ row.skuArticul }}
        </td>
        <td>{{ row.skuName }}</td>
        <td>{{ row.RequestNumber }}</td>
        <td>{{ row.orderNumber }}</td>
        <td>{{ row.specificProduct == '1' ? 'Да' : 'Нет' }}</td>
        <td>{{ row.deliveryPointName }}</td>
        <td>{{ row.deliveryPointAddress }}</td>
        <td v-if="atLeastOneTender">{{ row.tender }}</td>
        <td>{{ row.remainDemand }}</td>
        <td>
          {{ row.freeStock }}
        </td>
        <td>{{ row.status }}</td>
      </tr>
    </tbody>
  </table>
</div>

php
  • 1 个回答
  • 10 Views
Martin Hope
Total Pusher
Asked: 2020-04-16 15:54:03 +0000 UTC

查看 PHP 进程在做什么

  • 1

PHP-cgi 进程有好几个,如何查看它们目前在做什么(至少一个)?例如,哪个文件。或 GET 请求。有必要评估系统的哪些模块正在执行。

有工具Xdebug和XHprof标志,但有其他选择吗?某种 Linux 方式来查看打开了哪些文件。

做了什么:

得到进程的PID

ps aux | grep php

有一个工作目录 - 服务器上有几个虚拟主机,已经有东西了

ls -ld /proc/16945/cwd
php
  • 1 个回答
  • 10 Views

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5