rails等での一括ユーザー作成

投稿を作成するための初期ダミーユーザーを作成するために、ユーザー名を一括で追加したいと考えています。
そこで、rakeファイルを作成してロードし、実行しようとしましたが、成功しませんでした。rakeファイルがロードされないこともあり、別の方法を使用するとロードされてから「作成方法がわかりません…」というエラーが rails c によってスローされます(成功せずに何時間も試したため、エラーメッセージを覚えていません)。

私がやったこと
users.rake ファイルを作成しました

cd /var/www/discourse
mkdir -p lib/tasks
touch lib/tasks/users.rake

nano で編集しました

cd /var/www/discourse/lib/tasks
sudo nano users.rake

そして、以下のコードをエディタに貼り付けて保存しました

namespace :users do
  desc "Create users from a list"
  task :create, [:usernames, :password, :domain] => :environment do |task, args|
    usernames = args[:usernames].split(',')
    password = args[:password]
    domain = args[:domain]

    User.transaction do
      usernames.each do |username|
        next if User.exists?(username: username)

        email = "#{username}@#{domain}"
        user = User.new(username: username, email: email, password: password)

        unless user.save
          puts "Failed to save user #{username}: #{user.errors.full_messages.join(", ")}"
          raise ActiveRecord::Rollback
        end
      end
    end
  end
end

rails c にロードし、タスクにロードしました

rails console
load 'lib/tasks/users.rake'
exit

その後、ユーザーを作成しようとしました

./launcher enter app
rake users:create["username1,username2", "password", "domain.com"]

サードパーティのものを使用せずに、ターミナルから試すことができる他の方法はありますか?

rake dev:populate を使用して、すぐに使えるテストデータでシードしてください。簡単です!

「いいね!」 3

コメントありがとうございます。

あなたの方法では、サイトがランダムなユーザーとデータでいっぱいになってしまい、それは望んでいません。また、ステージングされたオンラインサイトは必要ありません。必要であればローカルでホストできます。

これは本番環境用です。ダミーユーザーには、実際には意味のあるトピックがあります。この目的は、空のサイトを一般に公開することではありません。

したがって、私が言及した質問に関連する解決策をお知らせください。
ユーザー(ユーザー名のリストがあります)をDiscourseのメインDBに挿入するだけでよいのです。

ありがとうございます。

このテクニックはローカル開発インストールにも使用できます(それが主な目的です)。

そのRakeタスクのコードを読んで、必要に応じて変更してはどうでしょうか?

「いいね!」 1

script/import_scripts 内のインポートスクリプトを確認し、CSV ファイルを読み取るものを探すことをお勧めします。

スプレッドシートからアイテムを作成できるスクリプトまたはプラグインを計画していましたが、他の作業が邪魔になっていました。

「いいね!」 1

コードを修正しましたが、Dockerコンテナ内の本番環境のディスコースで、touchコマンドでrakeファイルを作成し、nanoで編集してから./launcher enter appでアプリに入り、railsに入ってrake -Tを確認したところ、rakeファイルがロードされません。これが私の主な懸念事項です。本番環境でファイルを実行してテストすることすらできません。

しかし、localhostでは問題なく、ファイルをlib/tasksにコピー&ペーストするだけで正常に動作します。このDockerとDockerコンテナは、直接アクセスする必要がある場合に苦痛です。なぜrakeタスクリストに自動的にロードされないのかさえわかりません。

そのため、rakeファイルが自動的にロードされないため、コマンドを実行できず、本番環境でまだ行き詰まっています。

Dockerを使用しない場合、あなたのサイトは私をサポートしません。そうでなければ、Dockerを削除してサイトを直接ホストすることに喜んで応じます。そうすれば、人生はずっと楽になります。

通常、rake タスクは開発環境でテストされ、プラグインの一部としてデプロイできます。

「いいね!」 1

ローカルで動作している場合は、そこにバックアップしてから本番環境に復元できます。

コンテナ内の /var/www/discourse/lib/rake にファイルを配置しましたか?

ローカルバックアップをライブサイトにアップロードすると、ライブサイトで行ったすべてのコンテンツが置き換えられてしまうのが問題です。ローカルインスタンスはありますが、このフォーラムの誰かがライブサイトで開発するように勧めてくれました。そのため、現在ライブサイトで開発しています(まだ公式には公開されていませんが)。

そして、ファイルをlib/tasksに配置しました。ローカルインスタンスでは機能しますが、ライブインスタンスでは機能しません。lib/rakeも試してみます。

「いいね!」 1

本番サイトで開発しないでください。

ローカルで開発し、変更をテーマコンポーネントまたはプラグインにパッケージ化してから、本番サイトにデプロイします。

以下は、プラグイン内のrakeタスクの例です。

「いいね!」 2

標準的なインストールでRailsやEmberを開発すべきではないと思いますが、本番環境コンテナでインポートを定期的に行っています。Rakeタスクなので、変更を有効にするためにサーバーを再起動する必要すらありません。

公開されていないので、何か問題が発生した場合にバックアップにロールバックしても安全なはずです。おそらくそこで行うでしょう。

ライブサイトをバックアップして開発サイトに復元し、作業を行ってから、ライブサイトにバックアップ/復元することもできます。

「いいね!」 3