페이지

2013년 9월 25일 수요일

구버전 Grails로 작업하기 ( Grails 1.2.2 )

구버전 Grails로 작업하기 ( Grails 1.2.2 )

개요

오랜시간 수정없이 잘 쓰이던 Grails로 만들었던 웹앱을 약간 수정할 일이 생겼습니다.
개발당시 Grails는 1.2.2 이고 현재 개발컴에 설치 되어있는 Grails는 2.2 버전입니다.
약간의 수정이 필요할 뿐 최신버전에 맞게 소스를 고치거나 하고 싶은 생각은 없습니다.
구버전 Grails를 다운받아서 설치하고 수정하고 패키징하는 과정입니다.

다운로드

Grails의 사이트는 http://grails.org/ 입니다.
다운로드 페이지로 이동합니다. ( http://grails.org/download )
최신버전은 2.3.0 이네요. 저는 구버전이 필요한 상황이므로
Download previous release 에서 1.2 버전을 선택하고 1.2.2의 binary를 클릭하여
grails-1.2.2.zip 파일을 다운로드 받았습니다.

설치

C: 드라이브에 압축을 풀었습니다. C:\grails-1.2.2\

일단 실행해 보니 에러가 발생합니다.
C:\>C:\grails-1.2.2\bin\grails 오류: 기본 클래스 org.codehaus.groovy.grails.cli.support.GrailsStarter을(를) 찾거나 로드할 수 없습니다.

이미 grails-2.2 버전이 설치되어있어서 충돌이 나는 것 같습니다.

C:\>set GRAILS_HOME=c:\grails-1.2.2
C:\>C:\grails-1.2.2\bin\grails
Welcome to Grails 1.2.2 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: c:\grails-1.2.2
No script name specified. Use 'grails help' for more info or 'grails interactive
' to enter interactive mode

GRAILS_HOME 을 재설정하고 실행하니 문제 없이 실행이 됩니다.

앱실행

수정할  앱 디렉토리로 이동해서
grails run-app
실행하니 브라우저에서 확인할 수 있는 url을 알려줍니다.

앱패키징

수정을 마치고 war 파일을 만들기 위하여 다음 명령을 차례대로 실행합니다.

grails prod clean
grails prod war

참고사항

- 외부 라이브러리는 앱\lib 폴더에 넣습니다.
- war 파일을 톰캣에서 돌릴 때
Caused by: groovy.lang.MissingMethodException: No signature of method: xxx.save() is applicable for argument types: () values: []
와 같은 에러가 발생한다면 war 파일을 만들기 전에 clean을 한번 실행해 보세요.
grails prod clean 

2013년 9월 16일 월요일

외부에서 SQL Server에 접속하기 위한 준비

[SQL Server 구성 관리자( Sql Server Configuration Manager )] 실행

[SQL Server 네트워크 구성] > [MSSQLSERVER에 대한 프로토콜] > [TCP/IP] '사용' 인지 확인하고 아니면 우클릭해서 '사용'으로 바꿉니다.

[SQL Server Managerment Studio] 실행

 [SQL Server Managerment Studio] > 좌측 [개체 탐색기] 에서 기본 인스턴스를 우클릭 하고 [속성]을 누릅니다.
 속성창에서 [보안] 페이지를 선택하고 [서버 인증] [SQL Server Windows 인증 모드]로 변경합니다.
 SQL Server를 다시 시작해줍니다.
 [SQL Server Managerment Studio] > 좌측 [개체 탐색기] 에서 기본 인스턴스를 우클릭 하고 [다시 시작]을 누릅니다.
 [새 쿼리]를 누릅니다.
 유저명( username1 ) , 암호 (1111) 로 로그인을 만들고 sysadmin 역할을 부여하는 명령을 입력하고 실행합니다.

create login username1 with password='1111', check_policy=off
go
exec sp_addsrvrolemember username1, sysadmin
go

 [SQL Server Managerment Studio] > 좌측 [개체 탐색기] 에서 기본 인스턴스 선택 > [보안] > [로그인] 을 선택하고 [F5] 키를 눌러 새로고침하여 추가된 username1 확인

 참고로 로그인을 삭제할 때는 아래 명령을 실행합니다.

drop login username1
go

[제어판] > [Windows 방화벽] 을 실행

 좌측에서 [고급 설정]을 선택합니다.
 고급 설정 창에서 좌측 [인바운드 규칙]을 선택하고 [새 규칙]을 누릅니다. 아래 내용을 입력합니다.
-       규칙종류 : 포트
-       프로토콜 및 포트 : TCP, 특정 로컬 포트[ 1433 ]
-       작업 : 연결 허용
-       프로필 : 도메인, 개인, 공용 모두 선택
-       이름 : SQL Server

 [마침]을 누릅니다.


이제 외부에서 접속하여 확인해 봅니다.

2013년 9월 13일 금요일

자바로 썸네일 만들기 thumbnailator

자바로 thumbnail을 만드는 라이브러리 입니다.
사용법이 간단하고 편해서 좋습니다.


몇 가지 기능을 살펴보겠습니다.

원본 파일을 썸네일 파일로 만들거나.
Thumbnails.of("original.jpg")
        .size(160, 160)
        .toFile("thumbnail.jpg");

썸네일을 OutputStream으로 출력할 수 있습니다.
OutputStream os = ...;
Thumbnails.of("large-picture.jpg")
        .size(200, 200)
        .outputFormat("png")
        .toOutputStream(os);

썸네일을 회전하고 워터마크를 넣을 수 도 있습니다.
Thumbnails.of(new File("original.jpg"))
        .size(160, 160)
        .rotate(90)
        .watermark(Positions.BOTTOM_RIGHT, ImageIO.read(new File("watermark.png")), 0.5f)
        .outputQuality(0.8f)
        .toFile(new File("image-with-watermark.jpg"));

설치는 라이브러리 파일을 다운로드하여 클래스패스에 추가하기만 하면 됩니다.


2013년 9월 12일 목요일

java.sql.SQLException: Value '0000-00-00' can not be represented as java.sql.Timestamp

Caused by: org.hibernate.exception.GenericJDBCException: could not load an entity: [classpath#133]

Caused by: java.sql.SQLException: Value '0000-00-00' can not be represented as java.sql.Timestamp

 하이버네이트에서 mysql 의 datetime 형 컬럼의 값이 0일 때 Date형으로 파싱하지 못하고 뿌리는 에러입니다.

 컬럼에 null을 허용하고 하이버네이트를 이용한 접근만 있었다면 테이블에 0값이 들어갈 일은 없을 겁니다.

 제경우는 mysql5.6 버전으로 업그레이드하면서 new Date() 로 설정된 값이 디비에 업데이트시 제대로 된 값을 저장하지 못하고 0값('0000-00-00 00:00:00')을 입력하는 현상이 발생하였습니다.

 대략 코드로 표현하면 아래와 같은 식입니다.

@Entity
@Table(name = "table1")
public class Bean1 {
    @Column(name = "date1")
    private Date date1;
    ...
}

bean1.setDate1(new Date());
dao.update(bean1);

 아래와 같이 new Date() 대신 SimpleDateFormat으로 조정을 해서 넣으면 또 저장이 되긴했습니다.

DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = format.parse(format.format(new Date()));
bean1.setDate1(date);

 근본적인 해결책은 아니라는 생각에 mysql connector/J 를 최신버전으로 바꿔보니 정상적으로 작동하였습니다.

 결론은 mysql업그레이드 시에는 mysql connector 도 함께 업그레이드 하는 것이 좋습니다. connector도 버전간에 기능이 달라지는 경우가 있으니 주의해야 합니다.

2013년 9월 11일 수요일

Mysql Connector/J 5.1

Mysql Java 용 JDBC 드라이버 입니다.

http://dev.mysql.com/downloads/connector/j/
다운로드 링크입니다.

MSI Installer 설치 파일은 어디에 파일들을 설치했는지 알려주지도 않고 설치가 끝납니다.
불편해서 지우고 Select Platform: 을 Platform Independent 로 변경하고 압축파일을 받아서 사용했습니다.

압축을 해제하고 jar파일(mysql-connector-java-5.1.26-bin.jar)을 복사해서 사용했습니다.

mysql-connector-java-3.1.10-bin.jar 를 사용하다가 최신버전으로 변경하였는데요. 적용과정에서 한가지 문제가 되었던 부분이 있습니다.

메타데이터를 사용하는 부분입니다.
ResultSetMetaData rsmd = resultSet.getMetaData();

3버전에서 rsmd.getColumnName(no) 는 필드의 Alias 값을 반환했습니다.
5버전에서는 rsmd.getColumnLabel(no) 를 사용해야 Alias 값을 받을 수 있고 rsmd.getColumnName(no) 는 컬럼의 실제 이름값을 반환합니다.

예를 들면 아래와 같은 쿼리가 있다면
select a as b from table;

3버전에서 rsmd.getColumnName(no) 는 'b'
5버전에서 rsmd.getColumnName(no) 는 'a'
5버전에서 rsmd.getColumnLabel(no) 는 'b'
가 됩니다.

2013년 9월 9일 월요일

org.apache.catalina.session.StandardManager doLoad 심각: IOException while loading persisted sessions: java.io.EOFException

- 톰캣 가동중 오류발생

org.apache.catalina.session.StandardManager doLoad 심각: IOException while loading persisted sessions: java.io.EOFException

- 해결방법

톰캣설치폴더\work 폴더를 지우고 다시 가동

백업 장치 'C:\Users\Administrator\Downloads\db.bak'을(를) 열 수 없습니다. 운영 체제 오류 5(액세스가 거부되었습니다.)입니다.

- 환경

윈도우 서버 2012, SQL Server 2012

- 명령

restore filelistonly from disk='C:\Users\Administrator\Downloads\db.bak'

- 결과

메시지 3201, 수준 16, 상태 2, 줄 7
백업 장치 'C:\Users\Administrator\Downloads\db.bak'을(를) 열 수 없습니다. 운영 체제 오류 5(액세스가 거부되었습니다.)입니다.
메시지 3013, 수준 16, 상태 1, 줄 7
RESTORE FILELIST이(가) 비정상적으로 종료됩니다.

- 해결

파일을 다른드라이브로 옮겨서 실행

- 결론

엑세스 거부관련 문제는 C: 드라이브가 아닌 곳으로 옮겨서 확인할것.

2013년 8월 9일 금요일

에러발생 Caused by: org.hibernate.MappingException: Unknown entity: ex.SampleEntity

*발생한 에러 메시지

Caused by: org.hibernate.MappingException: Unknown entity: ex.SampleEntity


*하이버네이트 설정이 아래와 같이 annotatedClasses 로 매핑한 경우라면

<bean id="sessionFactory"          class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
          <property name="dataSource" ref="dataSource" />
          <property name="annotatedClasses">
               <list>
<value>ex.SampleEntity</value>
               </list>
          </property>
...

*아래와 같이 SampleEntity 클래스에 @Entity 어노테이션이 있는지 확인하세요.

@Entity @Table(name = "SampleEntity")
public class SampleEntity{


잘되던 클래스가 안돼서 확인해보니 언제 지웠는지 @Entity 어노테이션이 없는 경우가 있었습니다.

2013년 5월 15일 수요일

PhoneGap 에서 Uncaught SyntaxError: Unexpected token <


cordova-2.7.0.js:6816

이곳에서 
"Uncaught SyntaxError: Unexpected token < "
에러가 발생한다면

cordova-2.7.0.js 와 같은 디렉토리에 cordova_plugins.json 파일을 생성해 보세요.
내용은 없어도 됩니다.

2013년 3월 16일 토요일

jamjs 설치 과정 요약


nodejs 를 설치 합니다.

http://nodejs.org/download/ 에서 제공하는 인스톨러를 이용합니다.
v0.10.0을 설치했다가 중간에 문제가 있어서 v0.8로 재설치한 경험이있습니다.
진행과정에서 문제가 생기면 이점 참고하세요.

노드의 패키지관리자 npm을 이용하여 jamjs를 설치합니다.

npm install -g jamjs

(mac 이라면)
$ sudo npm install -g jamjs

테스트 해보기

D:\temp>mkdir jamtest

D:\temp>cd jamtest

D:\temp\jamtest>jam install jquery
installing from repositories jquery
Building version tree...
repositories checking "jquery"
installing jquery@1.9.1 (cached)
updating jam\require.config.js
updating jam\require.js
OK

D:\temp\jamtest>notepad index.html
<script src="jam/require.js"></script>

jam 실행결과 : <span id="jamtext"></span>

<script>
  require(['jquery'], function ($) {
    $('#jamtext').html('Hello, jam world!!!');
  });
</script>

마지막으로 브라우저에서 제대로 보이는지 확인해봅니다.














jamjs , Error: TypeError: Arguments to path.resolve must be strings


Mac 에서 jamjs를 써보려다 발생한 에러입니다.


$ jam install jquery
Error: TypeError: Arguments to path.resolve must be strings
    at Object.exports.resolve (path.js:313:15)
    at Object.exports.extendOptions (/usr/local/lib/node_modules/jamjs/lib/commands/install.js:133:32)
    at /usr/local/lib/node_modules/jamjs/lib/commands/install.js:97:23
    at /usr/local/lib/node_modules/jamjs/lib/commands/install.js:301:13
    at /usr/local/lib/node_modules/jamjs/node_modules/async/lib/async.js:677:28
    at /usr/local/lib/node_modules/jamjs/lib/project.js:74:20
    at /usr/local/lib/node_modules/jamjs/lib/project.js:47:20
    at Object.cb [as oncomplete] (fs.js:154:19)
Failed

jamjs 설치과정에서 경고가 하나 있었습니다.


$ sudo npm install -g jamjs
Password:
npm http GET https://registry.npmjs.org/jamjs
npm http 304 https://registry.npmjs.org/jamjs
npm http GET https://registry.npmjs.org/fstream
npm http GET https://registry.npmjs.org/mkdirp
npm http GET https://registry.npmjs.org/inherits
...
npm http 304 https://registry.npmjs.org/requirejs/2.1.4
npm http 304 https://registry.npmjs.org/tar
npm http 304 https://registry.npmjs.org/fstream-ignore
npm WARN engine tar@0.1.16: wanted: {"node":"~0.5.9 || 0.6 || 0.7 || 0.8"} (current: {"node":"v0.10.0","npm":"1.2.14"})
npm http GET https://registry.npmjs.org/graceful-fs
npm http GET https://registry.npmjs.org/lru-cache
npm http GET https://registry.npmjs.org/sigmund
...
npm http 304 https://registry.npmjs.org/eyes
npm http 304 https://registry.npmjs.org/cycle
/usr/local/bin/jam -> /usr/local/lib/node_modules/jamjs/bin/jam.js
jamjs@0.2.15 /usr/local/lib/node_modules/jamjs
├── inherits@1.0.0
├── semver@1.0.14
├── almond@0.2.5
├── fstream-ignore@0.0.6
├── ncp@0.2.7
├── async@0.1.22
├── mime@1.2.9
├── mkdirp@0.3.5
├── request@2.9.203
├── underscore@1.3.3
├── requirejs@2.1.4
├── rimraf@2.0.3 (graceful-fs@1.1.14)
├── minimatch@0.2.11 (sigmund@1.0.0, lru-cache@2.2.2)
├── fstream@0.1.22 (graceful-fs@1.2.0)
├── tar@0.1.16 (block-stream@0.0.6)
└── prompt@0.2.1 (colors@0.6.0-1, revalidator@0.1.5, pkginfo@0.3.0, utile@0.1.7, winston@0.6.2)

nodejs의 버전을 다운그레이드 하여 해결하였습니다.

node-v0.10.0 -> node-v0.8.17

따로 node-v0.10.0 을 지우거나 하지 않고 node-v0.8.17 을 설치하였는데 이상없이 잘 되는것 같습니다.


$ jam install jquery
installing from repositories jquery
Building version tree...
repositories checking "jquery"
downloading http://jamjs.org/repository/jquery/jquery-1.9.1.tar.gz
extracting /Users/vezi/.jam/cache/jquery/1.9.1/jquery-1.9.1.tar.gz
installing jquery@1.9.1
updating jam/require.config.js
updating jam/require.js
OK

2013년 3월 12일 화요일

Stripes .학습 001

분류 : 자바 웹 프레임워크
자료 : Stripes Quick Start Guide
주제 : 목록 및 조회용 페이지 흐름

학습내용요약

Stripes is a presentation framework for building web applications using the latest Java technologies.

아래와 같은 ActionBean 을 만듭니다.

net.sourceforge.stripes.examples.quickstart.CalculatorActionBean 

이 ActionBean에 접근하기 위한 URL을 만드는 방법입니다.
  • Removes any package names up to and including packages called 'web', 'www', 'stripes' and 'action'
  • Removes 'Action' and 'Bean' (or 'ActionBean') if it is the last part of the class name
  • Converts it to a path and appends '.action'
순서대로 적용합니다.

패키지 명에서 앞에서 stripes까지 제거합니다.
examples.quickstart.CalculatorActionBean 

ActionBean을 제거합니다.
examples.quickstart.Calculator

이를 path로 바꾸고 .action을 붙여줍니다.
/examples/quickstart/Calculator.action
이것이 이 CalculatorActionBean 에 접속하는 URL입니다.
브라우저에서 이 주소로 접속하면 CalculatorActionBean 이 실행됩니다.
일반적인 웹프로그래밍으로 보면 Controller역할을 한다고 보면 됩니다.

이런 주소로 접근 할 때는 @DefaultHandler 가 붙어있는 메소드가 실행됩니다.
@DefaultHandler
public Resolution addition() {
    result = numberOne + numberTwo;
    return new ForwardResolution("/quickstart/index.jsp");
}


뷰로 전달할 값 설정
위 예에서는 result 멤버변수에 값을 넣었습니다.


뷰 파일로 이동
return new ForwardResolution("/quickstart/index.jsp");


뷰 파일에서 이 정보를 사용하는 방법

/quickstart/index.jsp 
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="stripes" uri="http://stripes.sourceforge.net/stripes.tld"%>
<stripes:useActionBean beanclass="net.sourceforge.stripes.examples.quickstart.CalculatorActionBean" var="actionBean" />

<tr>
  <td>Result:</td>
  <td>${actionBean.result}</td>
</tr>

stripes 태그를 사용하기위한 준비.
CalculatorActionBean을 actionBean이라는 이름을 사용할 것이라는 선언.
${actionBean.result} 와 같이 앞서 처리했던 값을 꺼내서 사용.

2013년 2월 22일 금요일

Python Django 학습 001

분류 : Python
책이름 : 쉽고 빠른 웹개발 Django
주제 : 2장 개발 준비

요약 : 개발 준비 과정

  • 파이썬 설치
    • http://www.python.org/
  • 장고 설치
    • https://www.djangoproject.com/download/
    • python setup.py install
  • 데이터베이스 설치
    • 파이썬에 sqlite3가 탑재되어있음.
  • 장고 프로젝트 만들기
    • D:\django>django-admin.py startproject django_bookmarks
  • 데이터베이스 설정
    • D:\django\django_bookmarks\django_bookmarks\settings.py 편집
  • 장고개발서버 실행하기
    • D:\django\django_bookmarks>python manage.py runserver

학습내용

장고 설치 과정

https://www.djangoproject.com/download/ 에서 장고 다운로드
Django-1.4.5.tar.gz
압축풀기
Django-1.4.5 디렉터리로 이동해서
python setup.py install

Django-1.4.5\django\bin\django-admin.py를 파이썬이 설치된 디렉터리로 복사합니다.
Django-1.4.5 디렉터리는 지워도 됩니다.
c:\>django-admin.py --version 
을 실행하여 버전이 출력되는지 확인합니다.

장고 프로젝트 만들기

D:\django>django-admin.py startproject django_bookmarks
를 실행하면 D:\django\django_bookmarks 디렉토리가 생성됩니다.

D:\django\django_bookmarks\django_bookmarks\settings.py
를 열고 아래와 같이 수정합니다.
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'bookmarksdb',                      # Or path to database file if using sqlite3.
        'USER': '',                      # Not used with sqlite3.
        'PASSWORD': '',                  # Not used with sqlite3.
        'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
    }
}

D:\django\django_bookmarks>python manage.py syncdb
를 실행하여 데이터베이스를 준비합니다.
슈퍼유저설정 물어보면 적당히 입력합니다.

개발 서버 실행하기

D:\django\django_bookmarks>python manage.py runserver
Validating models...

0 errors found
Django version 1.4.5, using settings 'django_bookmarks.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.

브라우저를 열어 http://127.0.0.1:8000/ 사이트를 확인해봅니다.


2013년 2월 20일 수요일

groovy 설치

자바가 설치되어있어야 합니다.

설치

http://groovy.codehaus.org/
에서 그루비 파일을 다운로드 받습니다. (groovy-binary-2.1.1.zip)

적당한 위치에 압축을 풀어줍니다.
C:\groovy-2.1.1

환경변수를 등록합니다.
GROOVY_HOME = C:\groovy-2.1.1
PATH = %PATH%;%GROOVY_HOME%\bin;

버전 정보를 출력하여 제대로 설치되었는지 확인합니다.
> groovy -v
Groovy Version: 2.1.1 JVM: 1.7.0_05 Vendor: ~~


라이브러리 설치 위치

%GROOVY_HOME%\conf\groovy-starter.conf 의 내용을 보면 그루비에서 사용하는 라이브러리들의 위치를 알 수 있습니다.


    # load required libraries
    load !{groovy.home}/lib/*.jar

    # load user specific libraries
    load !{user.home}/.groovy/lib/*.jar

    # tools.jar for ant tasks
    load ${tools.jar}


{groovy.home}/lib 또는 {user.home}/.groovy/lib 폴더에 필요한 라이브러리들을 넣어두면 그루비에서 사용할 수 있습니다.

2013년 2월 14일 목요일

AttributeError: 'str' object has no attribute 'read'

python simplejson 사용 중
AttributeError: 'str' object has no attribute 'read'
발생


>>> import simplejson as json

>>> json.load("{\"name\":\"park\"}")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "simplejson\__init__.py", line 393, in load
    return loads(fp.read(),
AttributeError: 'str' object has no attribute 'read'
>>> json.loads("{\"name\":\"park\"}")
{u'name': u'park'}
>>>

문자열을 디코딩하려면 loads 함수를 사용해야 하나 봅니다.

윈도우에서 python simplejson 설치

http://pypi.python.org/pypi/simplejson
에서 파일을 다운로드 받습니다.

simplejson-3.0.7.tar.gz

압축을 풀어줍니다.
압축풀린 폴더에 보면 setup.py 가 있습니다.

커맨드창에서 압축 푼 디렉토리로 이동후
python setup.py install
을 실행합니다.

python을 실행 후
>>> import simplejson
해서 에러 나지 않으면 설치가 완료된 것입니다.

2013년 2월 13일 수요일

tornado 405: Method Not Allowed

405: Method Not Allowed

WARNING:root:405 GET / (192.168.123.112) 0.49ms

POST 요청이 왔는데 post() 메소드가 없거나.
GET 요청이 왔는데 get() 메소드가 없거나
할 경우에 발생합니다.

메소드가 존재하는지를 확인합니다.
다음으로 핸들러 설정을 잘못하였거나 혹은 오타를 입력하였는지를 살펴봅니다.
소스 상에서 들여쓰기를 잘못 할 경우 인터프리터가 지적해주긴하지만
간혹 오류없이 실행되었는데 들여쓰기가 일치하지 않아 메소드를 찾지 못하는 경우도 있으니 이런부분도 확인해봅니다.




2013년 2월 12일 화요일

tornado HelloWorld에 컨트롤러 추가

import tornado.ioloop

import tornado.web

class MainHandler(tornado.web.RequestHandler):

    def get(self):

        self.write("Hello, world")

class MainHandler2(tornado.web.RequestHandler):

    def get(self):

        self.write("second handler")



application = tornado.web.Application([

    (r"/", MainHandler),
    (r"/two", MainHandler2),

])


if __name__ == "__main__":

    application.listen(8889)

    tornado.ioloop.IOLoop.instance().start()

위 소스에서 굵고 밑줄쳐진 부분이 추가된 부분입니다.
http://localhost:8889/two 로 접속하면 MainHandler2 가 실행되고
접근 방법에 따라 get() 또는 post()함수가 실행됩니다.

2013년 2월 8일 금요일

리눅스에서 안드로이드 개발환경 구축과정에서 sdk tool 실행 안되는 문제

민트리눅스나 우분투에서 안드로이드 개발 환경을 구축하는 과정에서
Android SDK Manager 에서 설치하는
Android SDK Tools 와 Android SDK Platform-Tools 에
adb, emulator 같은 실행 파일이 있는데요.
이들을 실행하면
"그런 파일이나 디렉터리가 없습니다"
라는 메시지가 뜨면서 실행이 안되는 문제입니다.

64bit 환경에서 32bit 실행파일을 실행시킬시 이런 에러가 날 수 있답니다.

sudo apt-get install ia32-libs


아래 참고사이트의 정보로 해결했습니다.

참고사이트

민트리눅스 설치시 한글 환경으로 바꾸는 과정에서 막힐땐


아래 내용을 확인해보세요.
  • Control Center > Language Support 로 가서 자동으로 업데이트 되는지.
  • 로그인 창에서 언어를 변경 하였는지.
  • 리부팅은 해봤는지.

2013년 2월 5일 화요일

PHP 파일 업로드 제한 설정

PHP 설치디렉토리에 있는 php.ini 파일에서 수정할 수 있습니다.

php.ini 파일의 위치가 어딘지 잘 모르겠다 싶으면.
사이트 루트에 phpinfo.php 파일을 만들고 아래 내용을 넣고 저장합니다.


<?php
    phpinfo();
?>

브라우저에서 http://사이트주소/phpinfo.php 로 접속하면
설정내용이 나옵니다.
Loaded Configuration File 에 해당하는 위치가 php 설정파일의 위치 입니다.

여기서 upload_max_filesize,post_max_size 로 검색하면 현재 어느정도 크기의
파일을 업로드 할 수 있는지 확인할 수 있습니다.


설정을 변경하려면
php.ini 파일을 열고 upload로 검색하여 해당위치로 이동하고

;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;

; Whether to allow HTTP file uploads.
; http://php.net/file-uploads
file_uploads = On

; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
; http://php.net/upload-tmp-dir
;upload_tmp_dir =

; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize = 1000M

; Maximum number of files that can be uploaded via a single request
max_file_uploads = 20

upload_max_filesize값을 원하는 크기로 바꿔줍니다.


; Maximum size of POST data that PHP will accept.
; http://php.net/post-max-size
post_max_size = 1000M

post_max_size 값도 비슷하거나 조금더 큰 크기로 바꿔줍니다.


아파치를 재가동하면 적용됩니다.

앞에서 phpinfo.php 를 만들었다면 http://사이트주소/phpinfo.php 로 확인해서
제대로 설정되었는지 확인해봅니다.

tornado 로 HelloWorld 출력



HelloWorld.py

import tornado.ioloop
import tornado.web

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, world")

application = tornado.web.Application([
    (r"/", MainHandler),
])

if __name__ == "__main__":
    application.listen(8889)
    tornado.ioloop.IOLoop.instance().start()
   
python HelloWorld.py

웹브라우저로 확인








tornado 설치

작업환경: 맥,리눅스

토네이도 웹 프레임워크에 필요한 라이브러리 설치.
sudo easy_install setuptools pycurl
sudo easy_install setuptools simplejson

토네이도 웹사이트
http://www.tornadoweb.org/

토네이도 최신버전을 다운로드 받아 설치합니다.


tar xvzf tornado-2.4.1.tar.gz
cd tornado-2.4.1
python setup.py build
sudo python setup.py install

문제해결
pycurl 설치시(맥에서)

error: Setup script exited with error: command 'clang' failed with exit status 1
xcode > preference > downloads > Command Line Tools 설치