2014.06.07 08:44

"http://guides.rubyonrails.org/getting_started.html " 5 Getting Up andRunning 이하 내용.


5.x 부터는 튜토리얼을 그대로 따라가면서 진행 중 ^^a


------------------------------------------------------------------------------------

5.5 Running a Migration


지금까지 본 것처럼, Rails는 Model을 db/migrate 디렉토리 안에 database migration 파일을 생성한다.  Migrations는 database 테이블들의 생성과 수정이 간단히 만들어지게 디자인된 Ruby 클래스다.  Rails 마이그레이션을 실행하는 rake 명령어를 사용한다. 그리고 이건 당신의 DB에 적용된 마이그레이션 한 결과를 되돌리는것이 가능하다. 마이그레이션 파일이름에는 날짜가 포함되어 있으며, 이를 통해 undo가 가능하다.


db/migrate/20140521122056_create_articles.rb 파일(파일명의 날짜는 당신이 생성한 날짜로 생성된다.)을 보면, 아래와 같은 내용을 볼 수 있다.


class CreateArticles < ActiveRecord::Migration
  def change
    create_table :articles do |t|
      t.string :title
      t.text :text
 
      t.timestamps
    end
  end
end


rake 명령을 이용해서 migration을 실행하자.


$ rake db:migrate


Rails는 Articles 테이블을 생성해 줄거다.


기본적으로 우리는 개발환경에서 작업을 하기 때문에, 이 명령어는 config/database.yml의 개발섹션에 정의된 정보를 반영하여 생성한다. 만약 다른 환경에서 migration을 실행하길 원한다면, rake 명령을 실행할 때, 인자값을 확실히 전달해야 한다. : rake db:migrate RAILS_ENV=production


5.6 Saving data in the controller

ArticlesController으로 돌아가서, database에 정보를 저장하는 새로운 Article Model을 사용하기 위해 create action을 변경하는 작업이 필요하다. app/controllers/articles_controller.rb를 열고, 아래와 같은 내용으로 수정하자.


def create
  @article = Article.new(params[:article])
 
  @article.save
  redirect_to @article
end


Rails Model은 database 컬럼에 자동으로 매핑된 속성에 초기에 바로 적용되게 할 수 있다. 첫번째 라인이 바로 그것이다. 다음으로, @article.save는 db에 모델을 저장한다. 마지막으로, 유저에게 결과를 보여준다.


나중에 다시 볼 수 있는데, @article.save 는 정상적으로 저장되었는지, 혹은 실패했는지를 boolean값으로 돌려준다.


http://localhost:3000/articles/new 로 가보면 아래와 같은 에러를 보게된다.


ActiveModel::ForbiddenAttributesError in ArticlesController#create

ActiveModel::ForbiddenAttributesError

Extracted source (around line #6):

4 5 6 7 8 9

def create
@article = Article.new(params[:article])
@article.save
redirect_to @article


Rails는 안전한 어플을 만들 수 있도록 도와주는 여러가지 보안 기능을 제공한다. 우리는 title,text 파라미터만 허락하길 원하니 article_params를 아래와 같이 더해보자.


def create
  @article = Article.new(article_params)
 
  @article.save
  redirect_to @article
end
 
private
  def article_params
    params.require(:article).permit(:title, :text)
  end


이 action에서 사용된 permit은 title과 text 두개만 수락하도록 한다.


"def article_params"는 private이다.  이는 속성값으로 위장되어 모델에 전달되는 것을 방지할 수 있다. 더 많은 정보를 위해서는  the blog article about Strong Parameters 를 참고하라.


5.7 Showing Articles


이제 다시 새로운 글을 쓰고 submit 버턴을 눌러보자. Rails는 show action을 찾을 수 없다고 투덜거릴거다. 더 진행하기 전에 show action을 추가해보자.


rake routes 의 결과에서 본 것처럼, show action을 위한 그 route는 아래와 같다.


article GET    /articles/:id(.:format)      articles#show


app/controllers/articles_controller.rb에 show action을 추가해보자.


def show
  @article = Article.find(params[:id])
end


두가지를 주목해야 한다. 우리는 우리가 원하는 article을 찾기 위해 요청 정보에 포함된 :id 인자값을 가져오는 params[:id]를 Article.find에 전달하여 찾는다. 또한, article object를 참조하기 위해 @를 앞에 붙인 임시 변수를 사용하는데, Rails는 이 임시 변수들을 view에도 전달하기 때문에 이렇게 사용할 수 있다.


이제, 아래와 같이 app/views/articles/show.html 파일을 새로 만들자.


<p>
  <strong>Title:</strong>
  <%= @article.title %>
</p>
 
<p>
  <strong>Text:</strong>
  <%= @article.text %>
</p>


마침내 새로운 아티클을 생성할 수 있게 되었다. 이제  http://localhost:3000/articles/new 로 접속해서 다시 시도를 해보자. 


5.8 Listing all articles


우린 아직 우리의 모든 articles에 대한 리스트를 볼 수 있는 방법이 필요하다. 이제 이걸 해보자. rake route에서 아래 내용을 볼 수 있었다.


articles GET    /articles(.:format)          articles#index


app/controllers/articles_controller.rb 파일의 ArticlesController 안에 index action을 추가해보자.


def index
  @articles = Article.all
end


그리고 마지막으로, app/views/articles/index.html.erb에 이 액션에 view를 추가하자.


<h1>Listing articles</h1>
 
<table>
  <tr>
    <th>Title</th>
    <th>Text</th>
  </tr>
 
  <% @articles.each do |article| %>
    <tr>
      <td><%= article.title %></td>
      <td><%= article.text %></td>
    </tr>
  <% end %>
</table>


이제 http://localhost:3000/articles 로 가면, 지금까지 등록한 모든 글들의 리스트를 볼 수 있다.


5.9 Adding links


이제 글을 생성하고, 글을 보고, 리스트를 볼 수 있습니다. 이제, 페이지를 넘나드는 몇몇 링크를 추가해보자.


app/views/welcome/index.html/erb를 열고, 아래와 같이 수정하자.


<h1>Hello, Rails!</h1>
<%= link_to 'My Blog', controller: 'articles' %>

link_to method는 Rails의 built-in view helpers 중 하나이다. 이걸 사용하면 텍스트 기반의 하이퍼링크를 만들 수 있는데, 여기서는 article로 연결해주자.


<table> 태크 아래에, add/views/articles/index.html.erb "새글쓰기"링크를 추가해보자. 


<%= link_to 'New article', new_article_path %>


app/views/articles/new.html/erb에 index action으로 돌아가는 링크를 넣어보자.


<%= form_for :article, url: articles_path do |f| %>
  ...
<% end %>
 
<%= link_to 'Back', articles_path %>


마지막으로, app/views/articles/show.html.erb에도 index action으로 돌아가는 링크를 추가하자. 그렇게하면 글을 보던 사람이 전체 리스트 보기로 돌아갈 수 있다.

<p>
  <strong>Title:</strong>
  <%= @article.title %>
</p>
 
<p>
  <strong>Text:</strong>
  <%= @article.text %>
</p>
 
<%= link_to 'Back', articles_path %>


만약 같은 컨트롤 안의 액션으로 링크할 때는, :controller 옵션을 명시할 필요는 없다. 레일즈는 기본적으로 현재의 컨트롤을 사용하기 때문이다.


개발모드에서는 매 요청마다 어플리케이션을 리로드하기 때문에, 서버를 재시작할 필요는 없다. 



5.10 Adding Some Validation


app/models/article.rb  모델 파일은 간단합니다. 


class Article < ActiveRecord::Base
end


아직 충분한 내용은 아니다. 하지만, Article class가 ActiveRecord::Base를 상속받은 것은 중요하다. Active Record는 기본적인 database CRUD(Create, Read, Update, Destroy) 기능들을 쉽게 처리할 수 있도록 해준다. 게다가, 정교한 검색을 제공하며, 또다른 모델을 동시 처리할 수 있다. 


Rails는 당신이 모델에 보낸 정보를 처리할 수 있는 방법들을 제공한다.  app/models/article.rb 파일을 열고 아래와 같이 수정하자.


class Article < ActiveRecord::Base
  validates :title, presence: true,
                    length: { minimum: 5 }
end


위 내용이 적용되면, 모든 기사의 제목을 최소 5자로 설정하게 설정하도록 할 수 있다. Rails는 여러가지에 대한 검증을 할 수 있다. 검증에 대해서는  Active Record Validations를 참고하라.


여기서는 @article.save를 호출할 때, 글에 어떤 문제가 있을 경우 false를 리턴시켜 볼 것이다. app/conrollers/articles_controller.rb를 다시 열어보면,  @article.save의 리턴값을 확인하지 않는다는 것을 알 수 있다. 그래서 @article.save가 실패할 경우, 유저에게 실패를 알리고, 돌아갈 수 있게 하는게 필요하다. 그렇게 하려면, app/controllers/articles_controller.rb 파일 안의 new와 create를 아래와 같이 바꿔보자.

def new
  @article = Article.new
end
 
def create
  @article = Article.new(article_params)
 
  if @article.save
    redirect_to @article
  else
    render 'new'
  end
end
 
private
  def article_params
    params.require(:article).permit(:title, :text)
  end










저작자 표시 비영리 동일 조건 변경 허락
신고
2014.05.06 09:57

"http://guides.rubyonrails.org/getting_started.html " 5 Getting Up andRunning 이하 내용.


흐름은 따라가지만, 내가 테스트하면서 정리한 내용만 들어있음.


------------------------------------------------------------------------------------
Blog 어플리케이션에 새로운 resource를 만들어보자. 여기서 resource는 글, 사람 혹은 동물같은 비슷한 객체들의 조합을 위해 사용되는 말이다.

Rails는 표준 REST resource를 정의된 resource 메소드를 제공한다. ('REST 인터페이스의 원칙에 대한 가이드'를 참고할 것!) 아래는 config/routes.rb에 'article' resource를 정의한 후의 모습이다.

Rails.application.routes.draw do
  resources :articles
  root 'welcome#index'
end

'rake routes'를 실행하면, 모든 표준 RESTful action들을 위해 정의된 routes를 볼 수 있다. 
prefix column의 의미는 나중에 보게 될텐데, 지금 알아두어야 할 사항은, Rails의 방향성은  단일 양식 article이며, 역할의 명확성을 추구하도록 만들어졌다.


다음 섹션에서는, 우리의 어플리케이션에 새로운 글을 생성하고 보는 기능을 추가할 것이다. 즉, CRUD의 C(Create)와 R(Read)의 기능이다. 입력 폼은 아래와 같다. 

The new article form

너무 기본적으로 보이긴 하지만, 일단은 이걸로 오케이!! 앞으로 우리는 이것으로 계속 발전시켜 잘 거니까. ^^

5.1 Laying down the ground work


이제 새로운 기사를 생성하는 어플리케이션을 만들어보자. 

기존에 생성한 어플리케이션에서 http://localhost:3000/articles/new를 입력해보면 에러가 발생한다. 

Routing Error
 uninitialized constant ArticlesController

이 에러는 route가 요청을 처리하는 controller가 정의되지 않아 발생하는 것인데, 생성만 해주면 간단히 해결된다. 아래 명령을 실행해보라.
 (이전 예제에 이어, blog 어플리케이션에서 생성하라.)
rails g controller articles 
app/controllers/articles_controller.rb를 볼 수 있다. 해당 내용은 이름만 명명되고, 실제 내용은 없는 상태다.

이제 좀 전에 열었던 페이지를 리플래쉬 해보면 아래와 같은 에러가 발생하는 것을 알 수 있다. 

Unknown action
  The action 'new' could not be found for ArticlesController

이 에러는 좀 전에 생성했던 AcriclesController에 액션이 없기 때문에 발생한다. 생성 시 별도 지정하지 않으면, 기본적으로는 빈 상태로 controller가 생성되기 때문이다.

controller안에 수동으로 생성해보자. app/controllers/articles_controller.rb를 열어 해당 클래스에 아래와 같이 새로운 method를 정의해보라.

def new
end

다시 갱신해보면 "Template is missing .. " 에러가 발생한다. 이유는 Rails는 이와 연동된 view가 없기 때문이다.

에러 메세지는 꽤 긴데, 이를 하나씩 살펴보자.

Missing template articles/new, application/new with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :jbuilder, :coffee]}. Searched in: * "C:/work/ruby/blog/app/views"


첫번째 부분에서는 찾지 못한 템플릿이 무엇인지 기록되어 있다. 여기서는 articles/new 템플릿이다. Rails는 이 템플릿을 처음으로 실행하려 하지만, 찾지 못할 경우, application/new 템플릿을 로드하려고 한다. 이는 ArticlesController가 ApplicationController를 상속받았기 때문이다.


다음 부분은 해쉬를 포함하고 있다. 이 해쉬의 ":locale"키는  템플릿이 작성된 언어가 무엇인지를 정의하고 있다. 기본적으로 영어를 사용하므로 "en"으로 정의된다. 다음 키인 ":formats"는 응답시 제공되는 템플릿의 형식을 정의한다. 기본은 html이며, 그래서 Rails는 html 템플릿을 찾는 것이다. 마지막 키인 ":handlers"는 우리의 템플릿을 실행하는 게 어떤 템플릿 핸들러들인지를 알려준다 ":erb"는 HTML 템플릿을 위한 가장 공통적으로 사용하는 것이다. ":builder"는 XML 템플릿을 위해 사용되며, ":coffee"는 Javascript템플릿을 빌드하는데 사용하는 "CoffeeScript"을 말한다. 


메세지의 마지막에는 Rails가 찾고 있는 위치가 어딘지를 알려준다. 예제에서는 하나의 위치만 있지만, 좀 더 복잡한 프로그램에서는 여러 다른 경로를 가지기도 한다.


"app/views/articles/new.html.erb"를 만들어보자. 파일의 확장자가 중요한데, 첫번째 확장자(html)는 템플릿의 포멧이며, 두번째 확장자(erb)는 사용될 핸들러를 정의한다. Rails는 이 프로그램을 위해 app/views에 있는 articles/new라고 불리는 템플릿을 찾아 실행한다. 템플릿의 포멧은 html만 가능하며, 핸들러는 erb, builder,coffee 중 하나여야 한다. 지금은 html form을 생성하기 원하는 것이니, erb를 사용해야 한다. 그러므로 이 파일은 articles/new.html.erb로 만들면되고, app/views 폴더 안에 위치해야 한다.


이제 파일을 해당 위치에 생성하고 아래 내용을 넣어보자.

<h1> New Article</h1>


http://localhost:3000/articles/new로 다시 가보면 위 내용을 정상적을 볼 수 있다. 이제 route, controller,action 그리고 view까지, 모두 조화롭게 작동하는 걸 보았다. 이제 새 글을 만들기 위한 폼을 만들어볼 시간이다. 


5.2  The first form


템플릿에 form을 생성할 때는 form builder를 사용하자. Rails의 우선적인 form builder는 form_for라는 이름으로 불리는 helper method에 의해 제공된다. 이 method를 사용하하려면, "app/views/articles/new.html.erb"에 아래 코드를 추가하라.

<%= form_for :article do |f| %>

  <p>

    <%= f.label :title %><br>

    <%= f.text_field :title %>

  </p>

 

  <p>

    <%= f.label :text %><br>

    <%= f.text_area :text %>

  </p>

 

  <p>

    <%= f.submit %>

  </p>

<% end %>

해당 페이지를 갱신하면 이제 원하는 폼을 볼 수 있다.


'form_for' 다음에 이 form을 위한 식별 객체를 정의한다. 이 예에서, :article이 된다. 이 method 의 block안에서 FormBuilder 객체 -여기서는 f다.- 는 두개의 label과 글을 작성하는데 사용하는 타이틀과 텍스트, 두개의 text field 를 빌드해서 사용한다. 마지막으로 f 객체를 최종 승인하는 submit 버튼을 생성하나다.

여기에 한가지 문제가 있다. 생성된 html 소스코드에서 소스보기를 하면, /articles/new라는, 폼을 위한 action 속성을 볼 수 있다. This is a problem because this route goes to the very page that you're on right at the moment(이런 문장 완전 싫어 ㅠ_ㅜ), and that route should only be used to display the form for a new article.


이 폼은 다른 어떤 곳으로 가라고 지시하기 하기 위해 다른 url을 사용할 필요가 있다. 이건 form_for의 :url 옵션을 통해 간단히 처리할 수 있다. 일반적으로 Rails에서, 새로운 폼을 처리하는데 사용되는 action을 "create"라고 부르며, 기본적으로 이 이름을 사용한다.


app/views/articles/new.html.erb를 아래처럼 수정해보자. 

<%= form_for :article, url: articles_path do |f| %>

이 예에서, articles_path helper는 :url 옵션에 전달된다. 이제 rake routes를 다시 실행해보면 아래와 같은 결과를 볼 수 있다. 

$ rake routes
      Prefix Verb   URI Pattern                  Controller#Action
    articles GET    /articles(.:format)          articles#index
             POST   /articles(.:format)          articles#create
 new_article GET    /articles/new(.:format)      articles#new
edit_article GET    /articles/:id/edit(.:format) articles#edit
     article GET    /articles/:id(.:format)      articles#show
             PATCH  /articles/:id(.:format)      articles#update
             PUT    /articles/:id(.:format)      articles#update
             DELETE /articles/:id(.:format)      articles#destroy
        root GET    /                            welcome#index


이제 내용을 채운 후 submit 버튼을 누르면 아래와 같은 에러를 볼 수 있다. 

Unknown action create for ArticlesController

이 에러를 해결하기 위해서는 ArticlesController에 create action을 넣어야만 한다. 


5.3 Creating articles

새로운 액션을 위해, app/controllers/articles_controller.rb의 ArticlesController 클래스에 create action을 넣자.

class ArticlesController < ApplicationController

def new

end

def create

end

end

다시 내용을 채우고 submit을 눌러보면 "template is missing" 에러를 볼 수 있다. 별거 아님. 일단 무시할 수 있다. create action에서 database(이하 db)에 새로운 글을 저장할 수 있어야만 한다. 


form의 필드들은 파라미터로 Rails에 보내진다. 그 파라미터들은 일반적으로 특수한 작업에 필요한, controller action안에서 참조된다. 아래처럼 create action을 수정해보자. 

def create

render plain: params[:article].inspect

end

render method는 params[:article].inspect의 텍스트와 값의 키를 가진 hash를 간결하게 보여준다. params method는 form에서 보내온 파라미터를 반영하는 객체이다. params method는 ActiveSupport::HashWithIndifferentAccess 객체를 돌려주는데, 이건 스트링이나 심볼을 키로 hash에 접근할 수 있다. 


이제 다시 해보면, 에러 대신 아래 내용을 볼 수 있다.

{"title"=>"First article!", "text"=>"This is my first article."}


5.4  Creating the Article model

Rails에서 Models은 단수 이름을 쓰며, db tables의 이름은 복수 이름을 사용한다.Rails는 모델생성을 위한 생성자를 재공한다. 아래 커멘트를 실행해보라.

$ rails generate model Article title:string text:text
이 커멘트에는 우리가 Article model을 원하며, 스트링 타입의 title 속성, 그리고 텍스트 타입의 text 속성을 요청했다. 이 속성들은 articles table에 자동으로 추가되며 Article model에도 자동으로 매핑된다. 


Rails를 여러 파일들을 만드는데, 지금은 app/models/article.rb와 db/migrate/20140521122056_create_articles 이다. (파일 이름은 생성 시간 등에 따라 약간 달라질 수 있다.)


저작자 표시 비영리 동일 조건 변경 허락
신고
2014.05.04 10:04

"http://guides.rubyonrails.org/getting_started.htm"의 흐름은 따라가지만, 내가 테스트하면서 정리한 내용만 들어있음.


----------------------------------------------------------------------------

다음으로 가기전에... 위 웹 사이트에서 controller, action, view의 생성을 했는데 부족한 듯 하여 조금 보충 내용을 추가함. 다음 섹션에서 상세히 설명은 되겠지만...


controller, view에 대해서 짧게 역할을 테스트 해보자. 


텍스트 필드에 입력한 정보를 controller에서 받아 view로 보여주자.


일단 유저가 입력하는 페이지를 아래와 같이 만들고 viewtest.html라는 이름으로 명명하자. viewtest.html 파일은 어디에 위치해 있던 상관없다.


<html>

<head><title> controller / view test </title> </head>

<body>

<form action="http://localhost:3000/">

please input your name <br>

<input type="text" name="yr_name"> <br>

<input type="submit"><br>

</form>

</body>

</html>


기존에 만들었던 app/controllers/welcome_controller.rb를 아래와 같이 수정한다.


class WelcomeController < ApplicationController

  def index

@data_yr_name = params[:yr_name]

  end

end


기존에 만들었던 app/views/welcome/index.html.erb를 아래와 같이 수정한다.


<h1> Hello! <%=@data_yr_name %> </h1>


viewtest.html를 실행하여 이름을 입력 후 submit 버튼을 누르면 입력한 이름이 출력되는 것을 확인할 수 있다. 


위 샘플을 통해 view와 controller의 역할과 작동방법을 알아 보았다. 


----------------------------------------------------------------------------


저작자 표시 비영리 동일 조건 변경 허락
신고
2014.05.03 23:06

지난번에 우연곡절 끝에 rails server를 정상적으로 가동하는데 성공했다. 


하지만 이후, 프로젝트를 만들 때 Gemfile은 항상 말썽이다. 


일단 이에 대한 상세원인은 다시 상세히 검토하여 다시 글을 올려둬야겠다.



일단 rails에서 DB를 다루어 API 서버를 만들어 보는게 목표이기에 코딩을 시작해 봐야지. 


그 시작은  "http://guides.rubyonrails.org/getting_started.html" 요기!! 공식 튜토리얼이니 찬찬히 보면서 시작해보자. 


아래는 "http://guides.rubyonrails.org/getting_started.html" 의 내용을 나름대로 정리한 내용이다.


rails --version 의 결과는 4.1.0 샘플과 같다.


blog라는 이름의 어플리케이션을 만들어 보자.


$rails new blog


cd blog로 들어가서 실행


$rails server

tzinfo에러는 여전히 발생. gemfile 파일을 수정하고 재실행하면 가동!


웹 브라우져에서 localhost:3000 으로 접속하면 "Welcome aboard" 화면 등장!


localhost:3000/blog 입력하면 아직 에러 화면 뜸. 이제 하나씩 만들어 보자.



튜토리얼 순서대로 "Hello!!"라고 말하는 레일즈를 만들어본다. 이를 위해서는 최소한 controller와 view가 필요하다.


controller의 역할은 어플리케이션으로부터 어떤 요청을 받는 것이다. Routing은 요청들을 어떤 controller가 받을지 결정한다. 종종, 하나의 controller에 하나 이상의 route가 존재하기도 하며, 각 route들은 서로 다른 action들을 제공하기도 한다. action의 목적은 view에서 보여줄 정보를 모으는 것이다.


view의 목적은 여러 정보를 우리가 읽을 수 있도록 만들어 출력하는 것이다. view는 단지 출력용이며, view 템플릿은 기본적으로 eRuby라는 언어로 작성되어진다.


이제 controller를 만들어보자.


$rails generate controller welcome index


"index"라고 불리는 action을 가진 "welcome"  controller를 생성한 것이다.


controller는 app/controller/welcom_controller.rb, view는 app/views/welcome/index.html.erb에 생성되었다.


"app/views/welcome/index.html.erb" 파일을 열어, 불필요한 것들을 지우고, 아래와 같이 바꿔보자.


<h1> 안뇽! rails~! </h1>


잘 나오는지 확인해보려고 localhost:3000/welcome/index 들어갔는데.. 헉!! 에러남. 알고보니 한글 인식 문제였음. 스크립트 파일이라 그런건가. 일단, 아래와 같이 일단 수정해서 정상 출력확인.


<h1> Hello! rails~! </h1>


이제 localhost:3000으로 입력했을 때 저 문장이 나오도록 해보자.


config/rubtes.rb 열어서 아래와 같이 수정해보라.


get 'welcome/index' 부분을 root 'welcome#index' 로 수정.


이제 localhost:3000으로 들어가면 변경된 내용을 확인할 수 있다.








저작자 표시 비영리 동일 조건 변경 허락
신고

'개발/경험' 카테고리의 다른 글

ruby on rails 시작해보기 - 2  (0) 2014.05.06
ruby on rails 시작해보기 - 1-1. 보충설명.  (0) 2014.05.04
ruby on rails 시작해보기 - 1  (0) 2014.05.03
ruby on rails 윈도우 설치  (0) 2014.04.20
Ruby on Rails  (0) 2014.04.16
SVN 속도 문제  (0) 2014.04.14
2014.04.20 12:35



1. ruby 설치

   http://rubyinstaller.org/downloads/ 에서 ruby 설치


2. rubygems 설치. 이것은 ruby를 위한 패키지 관리 프레임웍이다. 이를 설치하는 과정은 아래.

   gem update --system  입력하여 rubygem 설치

   gem install rubygems-update 입력

   update_rubygems 입력


3. rails 설치

   gem install rails 

  -> 설치 중 아래 에러 발생

Installing ri documentation for actionpack-4.1.0

ERROR:  While executing gem ... (Errno::EINVAL)

    Invalid argument - ./ActionDispatch/Routing/Mapper/Scoping/:

  -> gem install rdoc 한 후 재설치를 시작했지만 반응 없음. 중단!!

  -> gem uninstall rails 실행하여 삭제. 

  -> gem install rails 재입력. 에러 없음. 단, 이전에 에러가 난 actionpack-4.1.0을 재설치한 것이 아니라 이상함.

  -> gem install actionpack 재설치 시도. 정상적임.


3-1. rails new hello로 테스트 시도. 아래 에러 발생.

 Gem::InstallError: The 'json' native gem requires installed build tools.


4. devkit 설치

   https://github.com/oneclick/rubyinstaller/wiki/Development-Kit 에서 다운로드

   ruby가 설치된 폴더의 devkit폴더를 만들어 압축 품.

     * 이 사이트에서 폴더명에 공백이 있으면 안된다고 함. 전체 폴더 포함해서.

  devkit의 bin에 가서

  ruby dk.rb init/review/install 를 순서대로 처리. 모두 정상.

 

4-1. rails new hello로 다시 테스트 시도. 성공


4-2. rails server 테스트.  에러 발생

C:/Ruby200/lib/ruby/gems/2.0.0/gems/tzinfo-1.1.0/lib/tzinfo/data_source.rb:199:i

n `rescue in create_default_data_source': No timezone data source could be found

. To resolve this, either install TZInfo::Data (e.g. by running `gem install tzi

nfo-data`) or specify a zoneinfo directory using `TZInfo::DataSource.set(:zonein

fo, zoneinfo_path)`. (TZInfo::DataSourceNotFound)

  .

  .

[출처] ruby on rails 설치|작성자 바다와해

  이상한 건 설치된 tzinfo의 version이 2.2.2인 상태. 에러의 내용과 조금 다른게 아닌가 생각됨. gems 폴더에 가도 tzinfo-1.1.0 만 존재함.


4-3. bundle install 하라는 메세지가 떠서 일단 이거 실행. 에러에 대한 변화는 없음.


4-4. 아래 사이트에서 64bit 버전에서의 Gemfile에 빠져 있는 x64_mingw 옵션을 넣으면 된다는 아티클이 있지만, 역시 같은 결과임.

  http://stackoverflow.com/questions/23022258/tzinfodatasourcenotfound-error-starting-rails-v4-1-0-server-on-windows


gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw]

Background

The TZInfo::DataSourceNotFound error is being raised by TZInfo, a dependency of the Active Support component of Rails. TZInfo is looking for a source of time zone data on your system, but failing to find one.

On many Unix-based systems (e.g. Linux), TZInfo is able to use the system zoneinfo directory as a source of data. However, Windows doesn't include such a directory, so the tzinfo-data gem needs to be installed instead. The tzinfo-data gem contains the same zoneinfo data, packaged as a set of Ruby modules.

Rails generates a default Gemfile when the application is first created. If the application is created on Windows, then a dependency for tzinfo-data will be included. However (as of Rails version 4.1.0), this omits :x64_mingw from the list of platforms, so doesn't work correctly on 64-bit Windows versions of Ruby. This should be fixed in future Rails releases.


4-5. devkit 32bit 버전을 재설치. 에러는 같은 상태.


4-6. 프로젝트 파일에 Gemfile 하단부에 64비트 버전 정보와 bundler 정보 추가

gem 'bundler'

gem 'tzinfo-data', platforms: [:mingw, :mswin , :x64_mingw]


4-7. rails server 성공!!



저작자 표시 비영리 동일 조건 변경 허락
신고

'개발/경험' 카테고리의 다른 글

ruby on rails 시작해보기 - 1-1. 보충설명.  (0) 2014.05.04
ruby on rails 시작해보기 - 1  (0) 2014.05.03
ruby on rails 윈도우 설치  (0) 2014.04.20
Ruby on Rails  (0) 2014.04.16
SVN 속도 문제  (0) 2014.04.14
애자일, xp 등등...  (0) 2014.03.19
2014.04.16 01:25

Ruby on Rails

개발/경험 2014.04.16 01:25

헐... 


완전 반할 듯.


자바로만 하다가 이거보니... 속도 하나는 기가 막히네 -_- 쩐다.



저작자 표시 비영리 동일 조건 변경 허락
신고

'개발/경험' 카테고리의 다른 글

ruby on rails 시작해보기 - 1  (0) 2014.05.03
ruby on rails 윈도우 설치  (0) 2014.04.20
Ruby on Rails  (0) 2014.04.16
SVN 속도 문제  (0) 2014.04.14
애자일, xp 등등...  (0) 2014.03.19
git 사용기  (0) 2014.03.18