윈도우 10 + 윈도우 스토어 우분투 + 루비 온 레일즈…

필자는 여러모로 리눅스를 많이 쓴다. 특히 우분투..

그렇지만 윈도우를 안쓰는 것도 아니고, 많은 개발자들이 여전히 윈도우 환경을 선호하기도 한다. (시계 옆에 스팀이 없으면 안되는 자들이 있다.)

뭐, 게다가 윈도우 10 환경에서는 대놓고 bash가 지원되고 리눅스들이 깔리고….

그러니 이젠 그냥 리눅스에서 이용하는 방법을 보여주려 한다.

설치법은 이전 블로그 글에 적었다. (괜히 적은 거 아니다. 다 이유가 있다.)

그럼 이제 설치 다 했으니 프로젝트를 만들거나 윈도우에서 만든 프로젝트나 받아온 프로젝트 폴더를 끌고 와야 하는데…

경로를 알아야 할 꺼 아냐! 근데 경로 쉽다.

  • 우분투에서 윈도우 경로로 가는 방법

/mnt/c <- 윈도우의 C 드라이브 경로다.

20180517_155117.png

그럼 이제 거기서부터 내 프로젝트가 있는 폴더까지 들어가서 실행을 하면 된다.

  • 윈도우 탐색기에서 우분투의 홈 폴더를 찾아가는 방법

될 수 있으면 하지 마라. 근데 어디 있는지는 알려주겠다.

C:\Users\[사용자 계정 폴더]\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs

20180517_155244

들어가 보면 우분투의 / 가 보일 것이다. 거기서 home/[사용자 이름 폴더] 가 작업을 했던 경로다.

이렇게 하면 진행하는 데 무리 없이 할 수 있다. 단, 윈도우 환경에서 이용하던 것과는 다르므로 반드시 bundle install 작업과 rails db:migrate를 통해서 기존에 작업했던 gem들과 데이터 모델은 만들어 줘야 한다.

20180517_155711.png

그 덕에 아까 작성했던 bcrypt 문제는 해결되었다.

 

Advertisements

cannot load such file — bcrypt_ext

레일즈에서 bcrypt를 이용하려고 하는데 터진 문제다.

지금 개발중인 레일즈 환경이 ruby 2.4.2, rails 5.1.6, windows OS 환경이다. 근데 사용자 관련 기능을 넣고 암호 저장으로 저걸 쓰려고 하는데 오류가 난다.

아마 검색해보면 죄다 윈도우 환경에서 안된다고 나온다. (ㅅㅂ…)

게다가 버전도 아예 정해져 있다. 3.1.11…. 아오 썅..!

이거 해결책이 골때린다. 그래서 내가 이건 아예 블로그로 남기려고 한다.

  • gem을 다시 설치한다.

신기하게도 이게 스택 오버플로우랑 레일즈 포럼에서 제일 인기 많은 방법이다.

윈도우의 루비와 레일즈 환경에서 동작시키면 이게 x64_mingw 환경에 맞춰서 바이너리가 생성된다. 루비와 레일즈의 devkit 설치가 msys, mingw 기반으로 되어 있기 때문에 몇몇 바이너리가 대놓고 이렇게 되어 있다. 이런 경우에는 루비 플랫폼 환경에서 쉽게 끌어다가 쓸 수 있도록 해주면 된다.

gem uninstall bcrypt 명령어로 지우는데, 여러 버전이 설치되어 있으면 그대로 전부 다 지워준다.

그 다음에 설치를 다시 하는데 다음과 같은 명령어로 설치를 한다.

gem install bcrypt –platform=ruby

이렇게 설치하면 설치된 gem 번들 뒤에 x64_mingw 가 붙어있지 않는 버전이 설치된다.

그 다음에 레일즈에서도 Gemfile에 추가한 번들이 있을 것이다. 그것 뒤에 플랫폼 지정을 적어준다.

gem ‘bcrypt’, ‘~> 3.1.7’, platforms: [:ruby]

혹시 모르니 x64_mingw를 그대로 쓰고 싶은 분들은 플랫폼을 이렇게 바꿔준다.

platforms: [:ruby, x64_mingw]

앞에 루비를 지워도 되는데 어차피 어느 환경이던 다 쓸 수 있도록 복수 환경을 지원한다고 해도 별 지장은 없다.

  • 환경을 옮긴다.

이래도 오류가 나는 사람들 많다. 진짜로… 다른 해결법이 있으면 좋겠는데, 정 방법이 없다면 아예 개발 환경을 옮겨봐라. 일단 규링이 해본 봐로는 리눅스 환경에서는 100% 문제 없이 된다.

윈도우 10을 이용하는 사용자라면 마이크로소프트 스토어에 있는 우분투를 설치 후 그곳에다가 환경을 만들어서 이용하는 것도 좋은 방법이다. 그 내부의 경로로 들어가는 방법은 별도의 블로그 글을 작성하도록 하겠다.

리눅스 서버를 자체 운영하거나 도커 환경에서 만들어서 이용하고자 한다면 그 방법도 좋은 방법일 수 있겠다. 단, 개발이 좀 번거롭긴 하겠다만… 일단 오류는 없다.

……

어이가 없다. 진짜….

또 다른 해결 방법이 있다면 꼭 블로그로 내용 남기도록 하겠다.

레일즈구성 요소, 그리고 MVC

내가 레일즈로 논문 프로젝트를 할 때, 레일즈 구성 요소가 진짜 MVC 디자인에 정말 잘 부합하는 녀석 중 하나라고 확신이 들 정도로 레일즈는 MVC가 철저하게 이루어져 있다. 게다가 모델, 뷰, 컨트롤러의 이름 생성에도 규칙이 존재하고, 이 규칙만 일치하면 레일즈 프로젝트에서 알아서 변수나 파일, 내용 끌어다 쓰는 건 진짜 쉬운 일이다.

레일즈 프로젝트의 구성 요소를 간단한 예시를 들어서 그림으로 그려보면 이렇게 구성될 수 있다.

그림1.png

이 예시는 다음과 같이 동작을 한다.

  1. 브라우저에서 특정 사용자를 확인하기 위해 주소 창에 http://XXXXXXXX.XX/users 이라고 입력했다고 하자.
  2. 해당 주소를 읽어서 어떠한 컨트롤이 필요한 지를 rails의 router에 지정된 형식에 따라 주소 변환과 그에 따른 컨트롤러 프로젝트로 연결한다. 이 경우에는 index 에서 사용자를 보여주도록 되어 있어서 index 처리로 넘어간다.
  3. index에 연결되어 있는 user_controller.rb 컨트롤러에서는 해당 유저가 있는지 User 모델을 검색한다. 모든 사용자를 검색하는 것이기 때문에 검색으로 User.all로 하였다.
  4. 모델 컨트롤러에 있는 액티브 레코드에 연결된 데이터베이스에서 알아서 검색한다.
  5. 검색 결과를 컨트롤러에 반환한다.
  6. 검색 결과를 View에 넘겨서 보여주는 형태로 전환한다.
  7. 전황된 HTML 코드를 컨트롤러가 받아 완전한 형태의 HTML 페이지로 구성한다.
  8. 브라우저로 HTML을 전달하여 화면에 표시한다.

모델 에서는 진짜로 데이터 모델에 관련된 작업만 하도록 구성되어 있고, 뷰는 진짜로 말 그대로 화면 뷰이다. 특정 템플릿에 맞춰서 화면을 보여주는 html 및 레일즈 코드를 이용하여 화면을 구성한다. 마지막으로 컨트롤러는 해당 주소의 이벤트 혹은 API에 데이터를 받으면 어떠한 작업을 해야하는지를 구성하는 코드로 이루어져 있다.

20180501_154042.png

그리고 이걸 확인할 수 있는 것이 바로 레일즈의 폴더이다. 예제로 만들었던 hello 폴더를 비주얼 스튜디오 코드로 열어보았다. 레일즈 어플리케이션 코드가 들어있는 app에 보면 controllers, views, models라고 별도의 폴더가 있는 것을 볼 수 있다. 레일즈에서는 이 각각의 폴더 안에 해당되는 코드를 만들어서 이용하면 알아서 MVC 모델의 디자인화 된 코드를 볼 수있다.

레일즈 관련된 책에도 보면 이런 내용에 대해서 칭찬을 많이 하는데, 내가 봐도 이 부분이 되게 깔끔학데 되어 있다. 사용자가 특정 URL에 접근하여 요청을 하면 컨트롤러가 이 요청을 받아 모델을 조회해서 데이터를 불러오고, 이 데이터를 바탕으로 뷰를 통해 시각적으로 표현한다. 그리고 시각적인 표현에 클릭을 하였을 때의 동작 또한 컨트롤러를 통한 후에 필요하면 데이터를 모델을 통해 호출하고 그걸 뷰가 표현하고…

그럼 이젠 이걸 어떻게 만드는 지 보여줄 수 있어야 하는데, 일단 그것은 다음 포스팅에서..!