development

모델을 만들려고 할 때 'rails generate'명령이 중단됨

big-blog 2020. 12. 31. 23:21
반응형

모델을 만들려고 할 때 'rails generate'명령이 중단됨


저는 rails를 처음 접했고 오늘 아침 전체 데이터베이스 디자인 / 모델을 버리고 다시 시작하기로 결정했습니다. 그리고 멍청이이기 때문에 나는 그것을 잘못했다고 확신합니다.

모든 파일을 제거 db/migrate/하고 테이블을 삭제했습니다. 그리고 첫 번째 새 모델 클래스를 생성하려고했을 때 레일이 매달려있었습니다. ^ C를 누르고 다른 것을 시도하기 전에 10 분 동안 잡초를 벗어났습니다.

이번에는 다시 테이블을 삭제하고 전체 프로젝트를 project.bad로 옮긴 다음 처음부터 다시 시작하기 위해 레일을 실행했습니다. 다시, 이전 이름으로 새 프로젝트를 생성 한 후 rails generate명령에 멈췄습니다 (동일한 프로젝트 이름을 사용했습니다).

필사적으로 같은 루트에 다른 이름으로 새 프로젝트를 만들려고했습니다. 유레카! 이것은 컨트롤러와 모델 클래스를 만드는 챔피언처럼 작동했지만 원래 프로젝트 이름을 사용하여 원래 프로젝트 또는 새로 만든 이름을 사용하여 아무것도 생성 할 수 없습니다. 이 작업을 다시 수행하려면 무엇을 놓치고 있습니까? 이 시점에서 완전한 손실은 신경 쓰지 않지만 원래 프로젝트 이름을 다시 사용할 수 있기를 바랍니다!

log / development.log는 다음과 같습니다.

   (255.5ms)  CREATE TABLE `schema_migrations` (`version` varchar(255) NOT NULL) ENGINE=InnoDB
   (337.7ms)  CREATE UNIQUE INDEX `unique_schema_migrations`  ON `schema_migrations` (`version`) 
  ActiveRecord::SchemaMigration Load (0.2ms)  SELECT `schema_migrations`.* FROM `schema_migrations`
   (0.2ms)  SELECT `schema_migrations`.`version` FROM `schema_migrations`

마지막 SELECT 이후에 무슨 일이 일어날 지 아십니까?


귀하의 경우 rails generate명령이 중지, 레일의 생성 binstubs으로 문제가 있다는 가능성이 높습니다. 언급했듯이 프로젝트 이름을 변경했습니다.

내 추측은 binstub의 일부 경로가 여전히 이전 프로젝트 디렉토리로 설정되었지만 더 이상 존재하지 않는다는 것입니다.

binstubs가 작동하는 방법에 대한 훌륭한 기사가 있습니다 : https://github.com/sstephenson/rbenv/wiki/Understanding-binstubs

레일 4

binstub을 재설정하려면 bin/rails에서 디렉토리를 삭제 하고 다음을 실행하십시오.

# generates binstubs for ALL gems in the bundle
bundle install --binstubs

# ...OR, generate binstubs for a SINGLE gem (recommended)
bundle binstubs rake

레일 5 / 레일 6

binstub을 재설정하려면 bin/rails에서 디렉토리를 삭제 하고 다음을 실행하십시오.

rake app:update:bin

'rails'명령 자체가 아니라 레일 5 이상에 대해 'rake'명령을 사용해야하는 이유는 무엇입니까?

rails 5 이후 일부 'rake'명령은 'rails'명령 내에 캡슐화됩니다. 그러나 'bin /'디렉토리를 삭제하면 'rails'명령 자체도 제거되므로 'rails'는 더 이상 사용할 수 없지만 'rake'는 여전히 존재하므로 재설정을 위해 'rake'로 돌아 가야합니다.


http://www.dixis.com/?p=754 에서 찾았습니다 .

내 프로젝트 중 하나를 위해 레일 4.1 (블리딩 엣지! 예 :))을 사용하고 있는데 갑자기 아침에 랩톱을 연 후 내 일반 레일 명령이 다음과 같이 나타납니다.

$> rails c
$> rails g migration Bla name description some_more_fields

그냥… 매달려 있었고 아무 일도 일어나지 않았나요 ??? 추가 입력을 기다리는 것처럼. 면밀한 조사를 통해 스프링 프로세스와의 연결이 끊어 지거나 손상되었다고 가정했습니다 (네트워크 사이를 많이 이동합니까? 아마도 설명 할 수있을 것입니다).

내가 알지 못하는 사람들에게 스프링은 Rails 애플리케이션 프리 로더입니다. 애플리케이션을 백그라운드에서 계속 실행하여 개발 속도를 높이므로 테스트, 레이크 작업 또는 마이그레이션을 실행할 때마다 부팅 할 필요가 없습니다. 물론 연결이 끊어 지거나 손상되면 중단됩니다.

간단한

$> spring stop

스프링 서버를 중지하면 rails 명령이 자동으로 다시 시작합니다. 고정 :)


Rails 5에서 binstup은 rails명령을 사용하여 생성됩니다 .

방금 bin 폴더를 삭제 한 다음 실행 rails app:update:bin하여 문제를 해결했습니다.

Rails 5에서 앱의 bin / 디렉토리에는 요청시 생성되는 스텁이 아니라 다른 소스 코드와 같이 버전이 지정된 실행 파일이 포함되어 있습니다.

업그레이드 방법은 다음과 같습니다.

bundle config --delete bin    # Turn off Bundler's stub generator
rails app:update:bin          # Use the new Rails 5 executables
git add bin                   # Add bin/ to source control

나는 사용하려고 할 때 같은 문제가 있었고 rails g controller그냥 멈출 것입니다. @mtrolle이 제안한 것과 동일한 단계를 사용했습니다.

bundle config --delete bin
rails app:update:bin
git add bin

그래서 내가 실행했을 때 : 예상대로 rails g controller Project index컨트롤러, 도우미 및 인덱스 뷰와 GET 'project/index'경로를 생성했습니다.

참조 URL : https://stackoverflow.com/questions/31857365/rails-generate-commands-hang-when-trying-to-create-a-model

반응형