RailsデフォルトPortを変える

Portが3000のやつがたくさん出てきたので、Railsのデフォルトポートを変えてみる。

1. script/rails

APP_PATH = File.expand_path('../../config/application',  __FILE__)
require File.expand_path('../../config/boot',  __FILE__)

# THIS IS NEW:
require "rails/commands/server"
module Rails
  class Server
    def default_options
      super.merge({
        :Port        => 3001,
        :environment => (ENV['RAILS_ENV'] || "development").dup,
        :daemonize   => false,
        :debugger    => false,
        :pid         => File.expand_path("tmp/pids/server.pid"),
        :config      => File.expand_path("config.ru")
      })
    end
  end
end
# END OF CHANGE
require 'rails/commands'

メリット:プロジェクトごとに変更可能。
デメリット:gitなどの共有される時にpushすると他人に影響を及ぼす

2. server.rb 編集

$ pwd
/Users/dongri/.rvm/gems/ruby-1.9.3-p374/gems/railties-3.2.13/lib/rails/commands
$ vim server.rb
    def default_options
      super.merge({
        :Port        => 3001,
        :environment => (ENV['RAILS_ENV'] || "development").dup,
        :daemonize   => false,
        :debugger    => false,
        :pid         => File.expand_path("tmp/pids/server.pid"),
        :config      => File.expand_path("config.ru")
      })
    end
$

メリット:自分だけの環境なので、gitなどで共有されず、他人に影響なし
デメリット:プロジェクト共通になる。

Advertisements

Mac OSX ( Lion ) に RubyOnRails3.1 環境構築

Macは Snow Leopard から Lion にアップグレードしたやつ。
Railsは3.0.3インストール済み。(Mac ( Snow Leopard ) に RubyOnRails3 環境構築

今回のそれのバージョンアップである。

環境確認

$ rails -v
Rails 3.0.3
$ which rails
/opt/local/bin/rails
$ 

アップデート

$ sudo gem update rails
$ rails -v
Rails 3.1.1
$ 

Mac ( Snow Leopard ) に RubyOnRails3 環境構築 (MySQL編)

前回の続き 「Mac ( Snow Leopard ) に RubyOnRails3 環境構築」でMySQL編です。

1. MySQLインストール
Mac OS X に MySQL をインストール

2. database.xml

development:
  adapter: mysql2
  database: railsdev
  host: localhost
  username: dongrikim
  password: test
  encoding: utf8

3. Gemfile

gem 'mysql2'

4. bundle install

$ bundle install

5. libmysqlclient.18.dylib

$ sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /opt/local/lib/ruby1.9/gems/1.9.1/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle

rvm 使ってた場合:

$ sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /Users/dongri/.rvm/gems/ruby-1.9.3-p374/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundle 

以上で、設定完了。

エラー編:
1. エラーその1

Gem files will remain installed in /Users/dongrikim/.bundler/tmp/98945/gems/mysql2-0.2.6 for inspection.
Results logged to /Users/dongrikim/.bundler/tmp/98945/gems/mysql2-0.2.6/ext/mysql2/gem_make.out
	from /opt/local/lib/ruby1.9/1.9.1/rubygems/installer.rb:486:in `block in build_extensions'
	from /opt/local/lib/ruby1.9/1.9.1/rubygems/installer.rb:446:in `each'
	from /opt/local/lib/ruby1.9/1.9.1/rubygems/installer.rb:446:in `build_extensions'
	from /opt/local/lib/ruby1.9/1.9.1/rubygems/installer.rb:198:in `install'
	from /opt/local/lib/ruby1.9/gems/1.9.1/gems/bundler-1.0.12/lib/bundler/source.rb:96:in `install'
	from /opt/local/lib/ruby1.9/gems/1.9.1/gems/bundler-1.0.12/lib/bundler/installer.rb:55:in `block in run'
	from /opt/local/lib/ruby1.9/gems/1.9.1/gems/bundler-1.0.12/lib/bundler/spec_set.rb:12:in `block in each'
	from /opt/local/lib/ruby1.9/gems/1.9.1/gems/bundler-1.0.12/lib/bundler/spec_set.rb:12:in `each'
	from /opt/local/lib/ruby1.9/gems/1.9.1/gems/bundler-1.0.12/lib/bundler/spec_set.rb:12:in `each'
	from /opt/local/lib/ruby1.9/gems/1.9.1/gems/bundler-1.0.12/lib/bundler/installer.rb:44:in `run'
	from /opt/local/lib/ruby1.9/gems/1.9.1/gems/bundler-1.0.12/lib/bundler/installer.rb:8:in `install'
	from /opt/local/lib/ruby1.9/gems/1.9.1/gems/bundler-1.0.12/lib/bundler/cli.rb:225:in `install'
	from /opt/local/lib/ruby1.9/gems/1.9.1/gems/bundler-1.0.12/lib/bundler/vendor/thor/task.rb:22:in `run'
	from /opt/local/lib/ruby1.9/gems/1.9.1/gems/bundler-1.0.12/lib/bundler/vendor/thor/invocation.rb:118:in `invoke_task'
	from /opt/local/lib/ruby1.9/gems/1.9.1/gems/bundler-1.0.12/lib/bundler/vendor/thor.rb:246:in `dispatch'
	from /opt/local/lib/ruby1.9/gems/1.9.1/gems/bundler-1.0.12/lib/bundler/vendor/thor/base.rb:389:in `start'
	from /opt/local/lib/ruby1.9/gems/1.9.1/gems/bundler-1.0.12/bin/bundle:13:in `'
	from /opt/local/bin/bundle:19:in `load'
	from /opt/local/bin/bundle:19:in `'

解決方法「1. MySQLインストール」 を行う。

2. エラーその2

/opt/local/lib/ruby1.9/gems/1.9.1/gems/mysql2-0.2.6/lib/mysql2.rb:7:in `require': dlopen(/opt/local/lib/ruby1.9/gems/1.9.1/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle, 9): Library not loaded: libmysqlclient.18.dylib (LoadError)
  Referenced from: /opt/local/lib/ruby1.9/gems/1.9.1/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle
  Reason: image not found - /opt/local/lib/ruby1.9/gems/1.9.1/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle
	from /opt/local/lib/ruby1.9/gems/1.9.1/gems/mysql2-0.2.6/lib/mysql2.rb:7:in `'
	from /opt/local/lib/ruby1.9/gems/1.9.1/gems/bundler-1.0.12/lib/bundler/runtime.rb:68:in `require'
	from /opt/local/lib/ruby1.9/gems/1.9.1/gems/bundler-1.0.12/lib/bundler/runtime.rb:68:in `block (2 levels) in require'
	from /opt/local/lib/ruby1.9/gems/1.9.1/gems/bundler-1.0.12/lib/bundler/runtime.rb:66:in `each'
	from /opt/local/lib/ruby1.9/gems/1.9.1/gems/bundler-1.0.12/lib/bundler/runtime.rb:66:in `block in require'
	from /opt/local/lib/ruby1.9/gems/1.9.1/gems/bundler-1.0.12/lib/bundler/runtime.rb:55:in `each'
	from /opt/local/lib/ruby1.9/gems/1.9.1/gems/bundler-1.0.12/lib/bundler/runtime.rb:55:in `require'
	from /opt/local/lib/ruby1.9/gems/1.9.1/gems/bundler-1.0.12/lib/bundler.rb:120:in `require'
	from /Users/dongrikim/Dropbox/Developer/Rails/dislike/config/application.rb:7:in `'
	from /opt/local/lib/ruby1.9/gems/1.9.1/gems/railties-3.0.3/lib/rails/commands.rb:28:in `require'
	from /opt/local/lib/ruby1.9/gems/1.9.1/gems/railties-3.0.3/lib/rails/commands.rb:28:in `block in '
	from /opt/local/lib/ruby1.9/gems/1.9.1/gems/railties-3.0.3/lib/rails/commands.rb:27:in `tap'
	from /opt/local/lib/ruby1.9/gems/1.9.1/gems/railties-3.0.3/lib/rails/commands.rb:27:in `'
	from script/rails:6:in `require'
	from script/rails:6:in `'

解決方法「5. libmysqlclient.18.dylib」を行う。

rails3 で scaffold やってみる

Rails3インストールしたのでscaffoldを使ってみる。

$ rails new blog
      create  
      create  README
      create  Rakefile
      create  config.ru
      create  .gitignore
....
      create  tmp/sockets
      create  tmp/cache
      create  tmp/pids
      create  vendor/plugins
      create  vendor/plugins/.gitkeep
$ 
$ cd blog/

$ rails generate scaffold Post id:integer title:string body:text created:date
      invoke  active_record
      create    db/migrate/20110123154529_create_posts.rb
      create    app/models/post.rb
      invoke    test_unit
      create      test/unit/post_test.rb
....
      create      app/helpers/posts_helper.rb
      invoke      test_unit
      create        test/unit/helpers/posts_helper_test.rb
      invoke  stylesheets
      create    public/stylesheets/scaffold.css
$

$ rake db:migrate
(in /Users/dongrikim/Dropbox/Developer/Rails/blog)
rake aborted!
uninitialized constant Bundler
/Users/dongrikim/Dropbox/Developer/Rails/blog/rakefile:4
(See full trace by running task with --trace)
$

エラーだ。 gem bundler インストールする。

$ sudo gem install bundler
$ bundle install

$ rake db:migrate
(in /Users/dongrikim/Dropbox/Developer/Rails/blog)
rake aborted!
uninitialized constant Bundler
/Users/dongrikim/Dropbox/Developer/Rails/blog/rakefile:4
(See full trace by running task with --trace)
$

それでも駄目だ。しょうがないのでtraceを見てみる。

$ rake db:migrate --trace
(in /Users/dongrikim/Dropbox/Developer/Rails/blog)
rake aborted!
uninitialized constant Bundler
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:2465:in `const_missing'
/Users/dongrikim/Dropbox/Developer/Rails/blog/config/boot.rb:9
......

どうも古いrakeを参照してるみたい。

$ rake --version
rake, version 0.8.3
$

$ sudo mv /usr/bin/rake /usr/bin/rake.old
$ sudo ln -s /opt/local/bin/rake1.9 /usr/bin/rake
$ rake db:migrate
(in /Users/dongrikim/Dropbox/Developer/Rails/blog)
==  CreatePosts: migrating ====================================================
-- create_table(:posts)
   -> 0.0017s
==  CreatePosts: migrated (0.0020s) ===========================================

$ rails server

rake できたっぽい!

http://localhost:3000/posts/

Snow LeopardでRuby On Rails環境構築

snowleopard   rails
 
 
1. Snow Leopardでのデフォルト環境確認

$ ruby -v
ruby 1.8.7 (2008-08-11 patchlevel 72) [universal-darwin10.0]
$ gem -v
1.3.1
$ rails -v
Rails 2.2.2

 
2. mysql インストール

http://dev.mysql.com/downloads/mysql/5.1.html#macosx-dmg こちらから Mac OS X 10.5 (x86_64) をダウンロード。ディスクイメージを開いたら、デフォルトのオプションのまま、まず「mysql-5.1.38-osx10.5-x86_64.pkg」をインストール。次に、同じくデフォルトオプションのまま「MySQLStartupItem.pkg」をインストールし、さらに「MySQL.prefPane」をダブルクリック
 
3. mysql 操作

$ /usr/local/mysql/bin/mysql -u root -p
Enter password:
データベース作成:
mysql> create database mysqldemo default character set utf8;
ユーザー作成、権限付与:
mysql> grant all privileges on mysqldemo.* to
    testuser@localhost identified by 'password';

 
4. gem install mysql

$ sudo env ARCHFLAGS="-arch x86_64" gem install mysql --
   --with-mysql-config=/usr/local/mysql/bin/mysql_config

(以下のエラーが発生した場合はXcodeをインストールしてください)

Building native extensions. This could take a while…
ERROR: Error installing mysql:
ERROR: Failed to build gem native extension.

/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby extconf.rb install mysql — –with-mysql-config=/usr/local/mysql/bin/mysql_config
mkmf.rb can’t find header files for ruby at /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/ruby.h

Gem files will remain installed in /Library/Ruby/Gems/1.8/gems/mysql-2.8.1 for inspection.
Results logged to /Library/Ruby/Gems/1.8/gems/mysql-2.8.1/ext/mysql_api/gem_make.out

 
5. rails プロジェクト作成

$ rails -d mysql mysqldemo

database.yml ファイル編集

development:
    adapter: mysql
    encoding: utf8
    database: mysqldemo
    pool: 5
    username: testuser
    password: password
    socket: /tmp/mysql.sock

 
6. scaffold 作成

$ script/generate scaffold user email:string name:string age:integer
$ rake db:migrate

 
7. サーバー起動して確認

$ script/server

Heroku, ブラウザでRubyOnRails

自宅Fedora、Vista、MacOSX、会社WinXP、いずれもRubyOnRails環境を構築してみました。はじめはちょっと難しかったのですが、なれていくと20分ぐらいで終わる作業です。しかし、自宅サーバー以外のところで書いたコードをどこかのサーバーに上げない限りはインターネット上でみることはできません。それと複数端末で共有するにはSVNかCVSを利用してチェックアウト、コミットといった作業が発生します。面倒!

先月ネットでブラウザだけでRubyOnRailsを使うことができると見かけたので、検索してみたところHerokuを発見。ユーザ登録してから2週間がすぎでもまだウェディング状態でした。今日朝起きたら携帯にherokuからのメールが届いてました。ちょっと興奮。さっそくログインしてAppを使ってみました。すごい!こんなことまでできるんだ!データベース、ログ、コンソールでRailsのコメント実行、一番気に入りはエディタです。かっこういい!。まだ実際試したことはないが、プラグインも自由にインストールできるらしいです。

http://footmark.heroku.com

RMagickを使ってみよう

新年会が終わって撮った写真をFriendsと共有しようと思ってRailsで作ってみました、機能としては問題なかったが、デジカで撮った写真をそのままのサイズでアップロードして一覧に表示してしまうとメモリ不足でPCが死んじゃいます。ちなみに画像は平均1.4MB、一ページ9枚表示。

50何枚もある写真を一つずつ開いてサイズを修正するのも可能ですが、時間の無駄、絶対やりたくない!そこでRubyになんかイメージファイルを操作するライブラリがないかと探してみたところ、RMagickを発見。書いてあるソースコードみると自分がやりたいことに合ってたので早速試しようと思った。

環境:Fedora8, Ruby 1.8

# yum install ImageMagick
# yum install ImageMagick-devel
# gem install RMagick

ここでエラーです。(ERROR: could not find RMagick locally or in a repository)
gemにないの?と思ってほかの方法でインストールしようと思ったが、もしかして

# gem install rmagick
Building native extensions. This could take a while…
Successfully installed rmagick-2.2.0
1 gem installed

成功したようです。

#!/usr/bin/ruby
require ‘rubygems’
require ‘RMagick’
img = Magick::ImageList.new(‘test.jpg’)
img.resize(200, 200).write(‘new.jpg’)

お~小さい画像が出てきました!感動!
もうすこし勉強して、元画像のサイズと比例にある画像を作ること。