docker에서 rails를 새로 만들려고 빠졌습니다.
개요
오랜만에 rails로 놀아 보려고 생각하면 빠졌기 때문에 메모.
※단, 2015/10/14 시점의 이야기이므로 주의해 주세요.
골은 proxy 환경인 windows에서 rails가 움직일 때까지.
환경 구축
전제
vagrant로 coreos에 로그인했습니다.
ruby:2.2를 proxy 대응
이번에는 rails:latest와 rails:onbuild를 사용한다.
또 proxy 환경이므로 이하의 사이트의 스크립트를 사용해 부모의 이미지인 「ruby:2.2」를 proxy 환경화.
ぃ tp // 이 m/s ㎺ g03/이고 ms/4b8573686에7 bf218b61
우선 신규 어플을 작성하고 싶기 때문에 「rails:latest」를 build하기 위해 이하를 체크아웃 하는지 그대로 Dockerfile을 작성해 「docker build -t rails:latest .」라든지 실행.
htps : // 기주 b. 코 m / 도 c 케 r ぃ b 등 ry / 라이 ls / b ぉ b / 7926577517 fb 974 f9에서 9 또는 1511162 d6d5 000435 / 도 c 케
이미지가 완성되면 새로운 앱을 만들기 위해 run을 실행.
docker run --rm -it -v "$(pwd)":/usr/src/app -w /usr/src/app rails rails new HOGE -d mysql
여기까지 잘 가면
Gemfile.lock
의 생성까지 되어 있을 것.우선 여기에서 MYSQL 컨테이너를 작성해 컨테이너를 기동해 둔다.
docker pull mysql
docker run -p 3306:3306 --name testdb -e MYSQL_ROOT_PASSWORD=password -d mysql
위의 명령을 실행하면 사용자가
root
이고 암호가 password
인 mysql 컨테이너가 시작됩니다.다음에 개발하기 위해
rails:onbuild
를 사용한다.htps : // 기주 b. 코 m / 도 c 케 r ぃ b 등 ry / 라이 ls / b ぉ b / 9fb5d2b7 0 f2 에 7029855028 에 07 에 86 아
위를 체크 아웃하거나 직접
Dockerfile
을 만들고 빌드합니다.이번에는 환경 변수의 설정도 하고 싶기 때문에 직접 작성한다.
FROM ruby:2.2
# throw errors if Gemfile has been modified since Gemfile.lock
RUN bundle config --global frozen 1
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
ONBUILD COPY Gemfile /usr/src/app/
ONBUILD COPY Gemfile.lock /usr/src/app/
ONBUILD RUN bundle install
ONBUILD COPY . /usr/src/app
RUN apt-get update && apt-get install -y nodejs --no-install-recommends && rm -rf /var/lib/apt/lists/*
RUN apt-get update && apt-get install -y mysql-client postgresql-client sqlite3 --no-install-recommends && rm -rf /var/lib/apt/lists/*
ENV DB_USER root
ENV DB_PASSWORD password
ENV DB_NAME testdb
ENV DB_ADAPTER mysql2
ENV DATABASE_URL ${DB_ADAPTER}://${DB_USER}:${DB_PASSWORD}@db/${DB_NAME}
EXPOSE 3000
환경 변수에 방금 작성한 mysql의 정보를 설정.
즉시 컨테이너를 빌드하고 시작합니다.
# Dockerfileの場所で実行
docker build -t rails:test .
# 先程作成したアプリのディレクトリに移動して実行
docker run -it -p 3000:3000 -v $(pwd):/usr/src/app --link testdb:db rails:test bash
bundle install
실행rails console을 시작해보십시오.
root@5949d24c0cac:/usr/src/app# bin/rails c
/usr/local/bundle/gems/activerecord-4.2.4/lib/active_record/connection_adapters/connection_specification.rb:177:in `rescue in spec': Specified 'mysql2' for database adapter, but the gem is not loaded. Add `g
em 'mysql2'` to your Gemfile (and ensure its version is at the minimum required by ActiveRecord). (Gem::LoadError)
오류. . .
Gemfile에 mysql2도 들어 있기 때문에 어째서인지 조사하면 그 망마의 기사가 있었다.
ぃ tp // m / Shizuma / ms / 0f9660d5d46 A0012
mysql2의 버전을 지정하면 된다는 것이므로 위의 기사대로 Gemfile을 수정하고
bundle install
root@1e8ccf02841a:/usr/src/app# bundle install
Don't run Bundler as root. Bundler can ask for sudo if it is needed, and installing your bundle as root will break this application for all non-root users on this machine.
You are trying to install in deployment mode after changing
your Gemfile. Run `bundle install` elsewhere and add the
updated Gemfile.lock to version control.
If this is a development machine, remove the Gemfile freeze
by running `bundle install --no-deployment`.
You have added to the Gemfile:
* mysql2 (~> 0.3.20)
You have deleted from the Gemfile:
* mysql2
또한 오류. . . .
왠지
bundle install --no-deployment
라고 써 있기 때문에 실행.root@1e8ccf02841a:/usr/src/app# bundle install --no-deployment
Don't run Bundler as root. Bundler can ask for sudo if it is needed, and installing your bundle as root will break this application for all non-root users on this machine.
You are trying to install in deployment mode after changing
your Gemfile. Run `bundle install` elsewhere and add the
updated Gemfile.lock to version control.
If this is a development machine, remove the Gemfile freeze
by running `bundle install --no-deployment`.
You have added to the Gemfile:
* mysql2 (~> 0.3.20)
You have deleted from the Gemfile:
* mysql2
오류. . .
Gemfile.lock이 갱신할 수 없는 것 같기 때문에 관계할 것 같은 곳 봐 보면 Dockerfile에 이런 기술이.
# throw errors if Gemfile has been modified since Gemfile.lock
RUN bundle config --global frozen 1
굿쿵 보자.
HIT.
전에 rails 했을 때는 아직 없었는지 사용하지 않았을 뿐인지 모르겠다 일단 해제하고 다시 "bundle install"
bundle config --delete frozen
bundle install
움직였다.
rails c
root@1e8ccf02841a:/usr/src/app# bin/rails c
Loading development environment (Rails 4.2.4)
irb(main):001:0> [*1..10].each{|n|p n}
1
2
3
4
5
6
7
8
9
10
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
rails console
움직였다.db를 만듭니다.
bin/rake db:create
HOST에서 확인.
mysql -h IP_ADDRESS -p
mysql> show databses;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'databses' at line 1
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| testdb |
| mysql |
| performance_schema |
+--------------------+
4 rows in set (0.00 sec)
DB도 생겼다.
덧붙여서 IP 주소는 vagrantfile 보거나, host로 ifconfig 실행하면 알 수 있다.
이어 브라우저에서 확인해 본다.
rails 컨테이너 안에 들어가
bin/rails s -b 0.0.0.0
보였다.
덧붙여서 처음에는
rails s
만으로 실행하면 움직이지 않았으므로 이하를 참고로 해 바인드 옵션을 붙였다.참고 htp // 호시. 는 bぉ. jp/엔트리/2015/01/19/203316
모처럼이니까 뭔가 만들어 보자.
core@core-01 ~ $ docker exec -it 1e8ccf02841a bash
root@1e8ccf02841a:/usr/src/app# bin/rake db:migrate
root@1e8ccf02841a:/usr/src/app# bin/rails g scaffold blog title:string body:string
invoke active_record
create db/migrate/20151014070727_create_blogs.rb
create app/models/blog.rb
invoke test_unit
create test/models/blog_test.rb
create test/fixtures/blogs.yml
invoke resource_route
route resources :blogs
invoke scaffold_controller
create app/controllers/blogs_controller.rb
invoke erb
create app/views/blogs
create app/views/blogs/index.html.erb
create app/views/blogs/edit.html.erb
create app/views/blogs/show.html.erb
create app/views/blogs/new.html.erb
create app/views/blogs/_form.html.erb
invoke test_unit
create test/controllers/blogs_controller_test.rb
invoke helper
create app/helpers/blogs_helper.rb
invoke test_unit
invoke jbuilder
create app/views/blogs/index.json.jbuilder
create app/views/blogs/show.json.jbuilder
invoke assets
invoke coffee
create app/assets/javascripts/blogs.coffee
invoke scss
create app/assets/stylesheets/blogs.scss
invoke scss
create app/assets/stylesheets/scaffolds.scss
root@1e8ccf02841a:/usr/src/app# bin/rake db:migrate
== 20151014070727 CreateBlogs: migrating ======================================
-- create_table(:blogs)
-> 0.0703s
== 20151014070727 CreateBlogs: migrated (0.0709s) =============================
첫 번째 migrate 필요합니까? 이미 잊고 있어. . .
우선 시작.
bin/rails s -b 0.0.0.0
http://IP_ADDRESS:3000/blogs
방문.할 수 있었다.
rails console을 만지고 싶었을 뿐인데 결국 시간이 걸렸다.
이상하네, docker를 사용하면 바로 사용할 수 있다고 전개하고 싶었을 뿐인데 바로 사용할 수 없었다. . .
나중에 신규 앱을 만들면 지금까지 할 수 있으면
docker-compose
사용하도록 하는 편이 편할까.우선 움직이는 곳까지 완료.
덤
docker exec -it コンテナID bash
docker start -a コンテナID
Reference
이 문제에 관하여(docker에서 rails를 새로 만들려고 빠졌습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/astrsk_hori/items/775f051cd85ece919923텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)