대량 사용자 이름(게시물을 생성하기 위한 초기 더미 사용자를 생성하기 위함)을 추가하고 싶습니다.
그래서 rake 파일을 만들고, 로드한 다음 실행하는 방법을 시도해 보았지만 성공하지 못했습니다. rake 파일이 로드조차 되지 않는 경우가 있고, 다른 방법을 사용하면 로드되긴 하지만 rails c에서 "I don’t know how to create …"라는 에러가 발생했습니다 (시간을 들여 수백 가지 다른 방법을 시도했지만 성공하지 못해 에러 메시지도 정확히 기억나지 않습니다).
내가 한 일
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에 로드하고 tasks에 로드했습니다.
rails console
load 'lib/tasks/users.rake'
exit
그리고 사용자 생성을 시도
./launcher enter app
rake users:create["username1,username2", "password", "domain.com"]
코드를 수정했는데, 도커 컨테이너 내의 프로덕션 디스커스 환경에서 touch 명령으로 rake 파일을 생성하고 nano로 편집한 후, ./launcher enter app으로 앱에 진입하고 rails를 실행한 뒤 rake -T를 확인해보니 해당 rake 파일이 로드되지 않았습니다. 이것이 제 주요 걱정거리입니다. 프로덕션 환경에서 파일조차 테스트할 수 없습니다.
반면 로컬호스트에서는 문제가 없습니다. 파일을 lib/tasks로 복사해서 붙여넣기만 하면 정상적으로 작동합니다. 직접적인 접근이 필요한 상황에서 이 도커와 도커 컨테이너는 정말 골칫거리입니다. 게다가 rake 태스크 목록에 자동으로 로드되지 않는 이유조차 파악할 수 없습니다.
그래서 rake 파일이 자동으로 로드되지 않아 명령을 실행할 수 없으므로, 여전히 프로덕션 환경에서 막혀 있는 상태입니다.
제가 도커를 사용하지 않았다면 해당 사이트가 저를 지원하지 않았을 텐데, 그렇지 않았다면 도커를 제거하고 사이트를 직접 호스팅하는 것을 훨씬 더 기꺼이 받아들였을 것입니다. 그렇게 했다면 훨씬 더 수월했을 것입니다.
문제는 로컬 백업을 라이브 사이트로 업로드하면 라이브 사이트에서 만든 모든 내용이 대체된다는 점입니다. 저는 로컬 인스턴스를 가지고 있지만, 이 포럼의 누군가가 라이브 사이트에서 개발을 하라고 조언했습니다. 그래서 현재는 라이브 사이트에서 개발을 하고 있습니다(아직 공식적으로 공개되지는 않았습니다).
그리고 파일을 lib/tasks에 넣었는데, 로컬 인스턴스에서는 작동하지만 라이브 인스턴스에서는 작동하지 않습니다. lib/rake도 시도해 볼 예정입니다.