Ruby on Rails

  • 後方互換があまり考慮されていない

ROR for CentOS6.2?

Windows開発環境の整備

Rubyの導入

Railsの導入

  • Instant Rails
    • 最終版は2.0で2007.12.28が最終更新
      • 試すだけなら楽で良いが、ちょっと心配w
  • で,結局
    $ gem install rails --include-dependencies

で導入完了

Vine 5 でgems

apt-get install rubygems

必ず以下を実行

gem update --system

以下を2回実行

gem install rails --remote --include-dependencies
  • MySQLインストール
# apt-get install mysql-client mysql-server
# apt-get install mysql-ruby

mysqladminでrootパスワード設定

mysqladmin -u root password 新しいパスワード
mysqladmin reload
  • 以下の例は、railsdevというデータベースを作り、その中にhogesというテーブルを作り、ユーザ名rails、パスワードxxxxでこのデータベースにアクセスできるようにしている。
  • テーブルは必ずidというカラムを含み、int auto_increment primary keyでなくてはならない。
$ mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 5.0.27-standard

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> create database railsdev;
Query OK, 1 row affected (0.04 sec)

mysql> use railsdev;
Database changed
mysql> create table hoges (id int auto_increment primary key, name  varchar(255), age smallint unsigned);
Query OK, 0 rows affected (0.04 sec)

mysql> grant all privileges on railsdev.* to rails@'%' identified by 'xxxx' with grant option;
Query OK, 0 rows affected (0.03 sec)

mysql> grant all privileges on railsdev.* to rails@localhost identified by 'xxxx' with grant option;
Query OK, 0 rows affected (0.00 sec)

mysql> quit;
Bye
  • railsディレクトリ作成
  • database.yml編集
    development:
    adapter: mysql
    database: railsdev
    host: localhost
    username: rails
    password: xxxx
    socket: /var/lib/mysql/mysql.sock
  • script/generate
    $ ruby script/generate model Hoge
    $ ruby script/generate scaffold Hoge --skip-migration name:string age:string
    
    --skip-migrationというのは、scaffoldかrailsの仕様変更で必要になったものらしい。 name:string age:stringなども同様で、これがないと、フォーム入力が出てこない。 
  • 最後に
    $ ruby script/server
  • これはすごい重要w
    • generate scaffold したときのHogeのあとに、必ず「s」をつけたフォルダ(?)を閲覧しないとみれない
    • 詳しくはconfig/routes.rbをチェック

RORアプリケーション構築の手順?

Mongrelの導入

  • apache+mongrel(mod_proxy&サブディレクトリ編)
# cd $APP1_DIR
# mongrel_rails start -d -p 3001 -e production --prefix /app1
# cd $APP2_DIR
# mongrel_rails start -d -p 3002 -e production --prefix /app2
# vim /etc/httpd/conf.d/proxy.conf
ProxyRequests Off
<Proxy *>
 Order deny,allow
 Allow from all
</Proxy>
ProxyPass /app1 http://localhost:3001/app1
ProxyPassReverse /app1 http://localhost:3001/app1
ProxyPass /app2 http://localhost:3002/app2
ProxyPassReverse /app2 http://localhost:3002/app2
  • mongrel_cluster+balancer

/でしか挙げられない(専用サーバ設定)

ProxyPass / balancer://mycluster/
ProxyPassReverse / balancer://mycluster/
<Proxy balancer://mycluster/>
       BalancerMember http://192.168.0.138:8000 loadfactor=20
       BalancerMember http://192.168.0.138:8001 loadfactor=20
       BalancerMember http://192.168.0.138:8002 loadfactor=20
       BalancerMember http://192.168.0.138:8003 loadfactor=20
       BalancerMember http://192.168.0.138:8004 loadfactor=20
</Proxy>

mongrelのサブディレクトリでの運用

  • 割とコツがいる。
    • というか今のところ下記はうまくいってない
      ProxyRequests Off
      <Proxy http://hogehoge/myprj/*>
       Order deny,allow
       Allow from all
      </Proxy>
      ProxyPass /myprj http://localhost:8000
      ProxyPassReverse /myprj http://localhost:8000
# mongrel_rails start -p 8000 -e production

mongrel_cluster+balancer+radiant

config/initializersに以下abstract_request.rbを作成

module ActionController
  class AbstractRequest < ActionController::Request
    def self.relative_url_root=(path)
      ActionController::Base.relative_url_root=(path)
    end
    def self.relative_url_root
     ActionController::Base.relative_url_root
    end
  end
end
  • mongrel_railsを設定
# mongrel_rails cluster::configure -p 8000 -N 2 -e production --prefix=/myprj
  • /etc/httpd/conf.d/balancer.confでバランサ設定
    ProxyPass /myprj balancer://myprj/
    ProxyPassReverse /myprj balancer://myprj/
    <Proxy balancer://myprj/>
           BalancerMember http://192.168.1.6:8000/myprj loadfactor=20
           BalancerMember http://192.168.1.6:8001/myprj loadfactor=20
    </Proxy>
  • この場合もスタイルシートなどへのアクセスは直接管理画面のスタイル設定に書き込む
  • 管理画面へのアクセスも http://hogehoge:8000/myprj/admin
  • ただし、失敗<javascriptが読めない

ROR on CentOS

  • 最も簡単なRailsアプリ
  • gem install sqlite3-rubyでを実行しておく
$ rails myblog
$ cd myblog
$ script/generate scaffold Article title:string body:text
$ rake db:migrate
$ script/server
  • アクセスはArticlesで

最短redmine

-------------------
mysql> 
 create database redmine1;
 grant all on redmine1.* to reduser@localhost identified by 'redpass123';
 SHOW variables LIKE "%sock%";
    で socket ファイルの位置を確認。>/var/lib/mysql/mysql.sock だった
-------------------

WORK_HOME=~/work
yum install openssl openssl-devel httpd-devel apr-devel gcc-c++

cd ${WORK_HOME}
wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p174.tar.gz
wget http://rubyforge.org/frs/download.php/60718/rubygems-1.3.5.tgz
wget http://rubyforge.org/frs/download.php/63583/redmine-0.8.5.tar.gz

tar zxvf ruby-1.8.7-p174.tar.gz
tar zxvf rubygems-1.3.5.tgz 
tar zxvf redmine-0.8.5.tar.gz 


cd ruby-1.8.7-p174
./configure --prefix=/usr
make
make test

make install
cd ext/openssl
ruby extconf.rb 
make

make install
cd ${WORK_HOME}/rubygems-1.3.5
ruby setup.rb 
gem install rails -v=2.2.2 
cd ${WORK_HOME}/redmine-0.8.5
cp config/database.yml.example config/database.yml        
vi config/database.yml

gem install mysql
-------------------------------
production:
  adapter: mysql
  database: redmine1 ★
  host: localhost
  username: reduser  ★
  password: redpass123 ★
  encoding: utf8
  socket: /var/lib/mysql/mysql.sock ★
-------------------------------

rake db:migrate RAILS_ENV=production
rake redmine:load_default_data RAILS_ENV="production"
chmod -R 755 files/ log/ tmp/ public/   
gem install passenger
passenger-install-apache2-module 

vi /etc/httpd/conf.d/passenger.conf (新規作成) 
vi /etc/httpd/conf/httpd.conf 編集(追記)
---------------------------------------
  Listen 82
  <VirtualHost *:82>
     #ServerName www.yourhost.com
     DocumentRoot /home/sakaik/redmine-0.8.5/public
  </VirtualHost>
---------------------------------------

 /etc/init.d/httpd restart


 chmod -R 777 tmp (^^;

最短redmine

-------------------
mysql> 
 create database redmine1;
 grant all on redmine1.* to reduser@localhost identified by 'redpass123';
 SHOW variables LIKE "%sock%";
    で socket ファイルの位置を確認。>/var/lib/mysql/mysql.sock だった
-------------------

WORK_HOME=~/work
yum install openssl openssl-devel httpd-devel apr-devel gcc-c++

cd ${WORK_HOME}
wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p174.tar.gz
wget http://rubyforge.org/frs/download.php/60718/rubygems-1.3.5.tgz
wget http://rubyforge.org/frs/download.php/63583/redmine-0.8.5.tar.gz

tar zxvf ruby-1.8.7-p174.tar.gz
tar zxvf rubygems-1.3.5.tgz 
tar zxvf redmine-0.8.5.tar.gz 


cd ruby-1.8.7-p174
./configure --prefix=/usr
make
make test

make install
cd ext/openssl
ruby extconf.rb 
make

make install
cd ${WORK_HOME}/rubygems-1.3.5
ruby setup.rb 
gem install rails -v=2.2.2 
cd ${WORK_HOME}/redmine-0.8.5
cp config/database.yml.example config/database.yml        
vi config/database.yml

gem install mysql
-------------------------------
production:
  adapter: mysql
  database: redmine1 ★
  host: localhost
  username: reduser  ★
  password: redpass123 ★
  encoding: utf8
  socket: /var/lib/mysql/mysql.sock ★
-------------------------------

rake db:migrate RAILS_ENV=production
rake redmine:load_default_data RAILS_ENV="production"
chmod -R 755 files/ log/ tmp/ public/   
gem install passenger
passenger-install-apache2-module 

vi /etc/httpd/conf.d/passenger.conf (新規作成) 
vi /etc/httpd/conf/httpd.conf 編集(追記)
---------------------------------------
  Listen 82
  <VirtualHost *:82>
     #ServerName www.yourhost.com
     DocumentRoot /home/sakaik/redmine-0.8.5/public
  </VirtualHost>
---------------------------------------

 /etc/init.d/httpd restart


 chmod -R 777 tmp (^^;

テーブル作成のポイント?

passenger-log

  LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-2.2.7/ext/apache2/mod_passenger.so
  PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-2.2.7
  PassengerRuby /usr/bin/ruby
  <VirtualHost *:80>
     ServerName www.yourhost.com
     DocumentRoot /somewhere/public    # <-- be sure to point to 'public'!
     <Directory /somewhere/public>
        AllowOverride all              # <-- relax Apache security settings
        Options -MultiViews            # <-- MultiViews must be turned off
     </Directory>
  </VirtualHost>

Redmine-0.8.7

  • 注意点
$ rake config/initializers/session_store.rb RAILS_ENV="production"
$ rake db:migrate RAILS_ENV="production"

Passengerとapacheの連携

  • シンボリックリンクを張って複数のRailsアプリをディレクトリ構造に分けて公開する
ln -s /home/rails/railsapp/redmine-0.8.7/public /var/www/html/redmine
  • 以下はhttp.confの例
<VirtualHost *:80>
   ServerName hogehoge.com
   DocumentRoot /var/www/html

   <Directory "/var/www/html/redmine">
        AllowOverride All
        Order allow,deny
        Allow from all
        RailsBaseURI /redmine
        RailsEnv development
   </Directory>

</VirtualHost>
  • また,デフォルト状態でscaffoldでテーブルを作成すると,DBはdevelopmentで作成される.このためRailsEnv?を設定するか,productionで作成すること

  • gemでgem install sqlite3をやってはいけない
    • gem install sqlite3-rubyが正解
    • もしやるとyumで入れたsqliteと衝突し動かない

一旦作ったscaffoldを作り直す

  • なるべくやらない
  • やるなら最初から作るのが良い
rake db:migrate version=0
rake db:drop
rm db/migrate/hogehoge.erb
rake db:create
rake db:migrate
ruby script/generate scaffold hogehoge ...
rake db:migrate
  • もしテーブルが複雑ならschema.rbを編集しテーブルを再構築
    rake db:schema:load

ゼロから作る?

scaffoldにアクションを追加する?

テーブル間リレーション?

最短Railsアプリ-MySQL編-?

RailsでAjax -基礎編-

新しいpassengerでスタイルシート等を読めるように

[root@rails redmine2010]# ln -s public/javascripts javascripts
[root@rails redmine2010]# ln -s public/stylesheets stylesheets
[root@rails redmine2010]# ln -s public/help help
[root@rails redmine2010]# ln -s public/themes themes
[root@rails redmine2010]# ln -s public/images/ images
[root@rails redmine2010]# ln -s public/plugin_assets plugin_assets

CentOS6.0でRedmine?

  • そろそろCentOSやばいかも

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-08-03 (木) 13:47:23 (1415d)