Friday, February 27, 2015

Ruby on rails моделын assosocation

Ноорог

Ruby on rails дээр энгийн болон N*M гэсэн 2table(модел)-ийн assosocation-г хэрэглэж байсан ч доорх table-уудын хоорондох холбоог яаж хийхээ мэддэггүй G ахаас асуусан амарханаар хийчихдэг юм байна. Тиймээс ноороглоод орхихоор шийдлээ.



Доор Atable болон Btable-ийн assosocation-ийг үзүүлэв

class Atable < ActiveRecord::Base
  has_many :A_Btables
  has_many :Btables, through: :A_Btables
end

class A_Btable < ActiveRecord::Base
  belongs_to :Atable
  belongs_to :Btable
end

class Btable < ActiveRecord::Base
  has_many :A_Btables
  has_many :Atables, through: :A_Btables
end


Доор Ctable болон Btable-ийн assosocation-ийг үзүүлэв

class Ctable < ActiveRecord::Base
  has_many :C_Btables
  has_many :Btables, through: :C_Btables
end

class A_Btable < ActiveRecord::Base
  belongs_to :Ctable
  belongs_to :Btable
end

class Btable < ActiveRecord::Base
  has_many :C_Btables
  has_many :Ctables, through: :C_Btables
end

Үүн дээр Atable.Ctable гэж хандахын тулд Atable-ийн модел дээрээ доорх маягаар зарлахад л хангалттай.

has_many :Ctable, :through => :Btable

Uniq өгөгдөл авахын тулд доорх маягаар бичиж өгч бас болно.

has_many :Ctable, :through => :Btable, :uniq => true

Ингээд Atable.Ctable гэж хандах боломжтой болж байна. Янзтай байгаа биз. Хэрэв өөр хэл дээр иймэрхүү олон table дамжсан өгөгдөл select хийх программ бичвэл жаахан урт зүйл болж магадгүй байх. Харин ROR дээр модел хоорондын assosocation ийг зөв тодорхойлвол хялбархан хийх боломжтой.

Шүдний эмнэлэг явах цаг болчихоод маш яаруу бичлээ хаха.
Дараа ахиад сайн нягталж алдаатай зүйл байвал засна.

Sunday, February 15, 2015

vagrant up хийх үед алдаа гарвал


Vagrant up хийхэд үед

Failed to mount folders in Linux guest. This is usually because
the "vboxsf" file system is not available. Please verify that
the guest additions are properly installed in the guest and
can work properly. The command attempted was:

mount -t vboxsf -o uid=`id -u vagrant`,gid=`getent group vagrant | cut -d: -f3` vagrant /vagrant
mount -t vboxsf -o uid=`id -u vagrant`,gid=`id -g vagrant` vagrant /vagrant

The error output from the last command was:


/sbin/mount.vboxsf: mounting failed with the error: No such device

дээрх алдаа гарвал доорх дарааллын дагуу ажиллуулна.

1. vagrant ssh

2. sudo /etc/init.d/vboxadd setup

Removing existing VirtualBox non-DKMS kernel modules       [  OK  ]
Building the VirtualBox Guest Additions kernel modules
Building the main Guest Additions module                   [  OK  ]
Building the shared folder support module                  [  OK  ]
Building the OpenGL support module                         [  OK  ]
Doing non-kernel setup of the Guest Additions              [  OK  ]
Starting the VirtualBox Guest Additions                    [  OK  ]

3. exit

4. vagrant halt

5. vagrant up

Sunday, February 8, 2015

Ruby on rails-ийг MAC дээрх виртуал машин дээр хэрхэн суулгах тухай тэмдэглэл

Сүүлийн үед Ruby on rails жаахан оролдож үзэж байгаа юм. Миний хувьд ажлын машин(windows) дээр энгийн болон виртуал машин дээр ROR-ийг хэрэглэж үзэж байсан. Өмнө нь виртуал машингүйгээр MAC дээр энэ зааврийн дагуу суулгаж байхад нээх асуудал гараагүй. Харин гэрийн машинд(MAC) виртуал машин дээр ROR-ийг суулгаж үзэх санаатай оролдсон чинь нэг сайн болж өгдөггүй жаахан ухсаны эцэст энэ зааврын дагуу суулгалаа. Тэгээд монгол хэл дээр мэдээлэл их ховор байсан тул хэрхэн суулгах тухай тэмдэглэл үлдээе гэж бодлоо.
Виртуал машин хэрэглэхгүй үед rails-ийг суулгах бол ийм гоё сайт байдагыг сүүлд мэдсэн.  http://installrails.com/

За ингээд орчин бэлдэх ажилдаа орцгооё.

Доорх бичиглэлд тод хараар бичигдсэн хэсэг нь ажиллуулах хэрэгтэй команд болно.

Ашиглагдах орчин
  • Mac OS x 10.9.4 
  • Virtualbox 4.2.26 
  • Vagrant 1.7.2
  • Centos 7
  • Ruby 2
  • Rails 4.2.0
  1. Виртуал машиныг суулгах
    1. VirtualBox-ийг суулгах
    2. Vagrant-ийг суулгах
    3. Centos7-г татаж нэмнэ
      1. vagrant box add [өөрийн татаж авсан зам]
      • Татаж авахгүйгээр доорх маягаар шууд нэмсэн ч болно.
        • vagrant box add Centos7 https://f0fff3908f081cb6461b407be80daf97f07ac418.googledrive.com/host/0BwtuV7VyVTSkUG1PM3pCeDJ4dVE/centos7.box
        • Үр дүн
        • box: Successfully added box 'Centos7' (v0) for 'virtualbox'!
    4. Үйлдлийн системийг vagrant-д init хийх 
      • vagrant init Centos7
      • Үр дүн
      • A `Vagrantfile` has been placed in this directory. You are now 
      • ready to `vagrant up` your first virtual environment! Please read
        the comments in the Vagrantfile as well as documentation on
        `vagrantup.com` for more information on using Vagrant.
    5. Vagrantfile-д vagrant ийн тохиргоог хийж өгнө.
      • vi Vagrantfile
      • 27дахь мөрний коммент болгосон хэсгийг авч доорх өөрийн машинаас виртуал машин руу хандах хаягийг бичиж өгнө.
        • config.vm.network "private_network", ip: "192.168.33.10" 
    6. Vagrant ийг ачааллана.
      •  vagrant up
        • Хэрэв алдаа гарвал үүнийг хараарай.
    7. Виртуал машин(vagrant дахь centos7) руу холбогдоно
      • vagrant ssh
      • Үр дүн
      • Last login: Sat Feb  7 12:27:04 2015 from 10.0.2.2
        -bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory
  2. Бэлтгэл ажил
    1. Git-ийг суулгах 
      • sudo yum -y install git
      • Үр дүн

      • Failed to set locale, defaulting to C
        Loaded plugins: fastestmirror
        Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
        base | 3.6 kB 00:00:00
        extras | 3.4 kB 00:00:00
        updates | 3.4 kB 00:00:00
        (1/2): extras/7/x86_64/primary_db | 43 kB 00:00:05
        (2/2): updates/7/x86_64/primary_db | 6.6 MB 00:00:13
        Determining fastest mirrors
        * base: www.ftp.ne.jp
        * extras: www.ftp.ne.jp
        * updates: www.ftp.ne.jp
        Package git-1.8.3.1-4.el7.x86_64 already installed and latest version
        Nothing to do

    2. Хөгжүүлэх орчин учир firewall-ийг зогсооно
      • sudo systemctl stop firewalld
      • sudo systemctl mask firewalld
  3. rbenv ийг суулгах
    1. rbenv ийг суулгах
      • git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
      • Үр дүн
      • Cloning into '/home/vagrant/.rbenv'...
        remote: Counting objects: 2014, done.
        remote: Total 2014 (delta 0), reused 0 (delta 0)
        Receiving objects: 100% (2014/2014), 326.86 KiB | 181.00 KiB/s, done.
        Resolving deltas: 100% (1256/1256), done.
    2. Path-ийг нэмэх
      • echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
    3. rbenv ийг init хийх shell нэмэх
      • echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
      • Шалгах
      • cat ~/.bash_profile
      • # .bash_profile
        # Get the aliases and functions
        if [ -f ~/.bashrc ]; then
        . ~/.bashrc
        fi
        # User specific environment and startup programs
        PATH=$PATH:$HOME/.local/bin:$HOME/bin
        export PATH
        export PATH="$HOME/.rbenv/bin:$PATH"
        eval "$(rbenv init -)"
    4. .bash_profile - ийг ачаалах
      • source ~/.bash_profile
    5. install - ийг шалгах
      • rbenv --version
      • Үр дүн
      • rbenv 0.4.0-129-g7e0e85b
    6. ruby-build - ийг суулгах
      • git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
      • Үр дүн
      • Cloning into '/home/vagrant/.rbenv/plugins/ruby-build'...
        remote: Counting objects: 4354, done.
        remote: Total 4354 (delta 0), reused 0 (delta 0)
        Receiving objects: 100% (4354/4354), 785.94 KiB | 345.00 KiB/s, done.
        Resolving deltas: 100% (2247/2247), done.
  4. Ruby - ийг суулгах
    1. Ruby - ийн version - уудын жагсаалтыг харах
      • rbenv install -l
      • Үр дүн
      • Available versions:
          1.8.6-p383
          1.8.6-p420
          1.8.7-p249
          1.8.7-p302
          1.8.7-p334
          1.8.7-p352
          1.8.7-p357
        ...........

        ........... 


          ree-1.8.7-2012.01
          ree-1.8.7-2012.02
          topaz-dev
    2. rbenv install 2.1.3 - ийг суулгана. Өөрийн боломжтой хувилбарыг дээрх жагсаалтаас хараад суулгаж болно.
      • rbenv install 2.1.3
      • Үр дүн
      • Downloading ruby-2.1.3.tar.gz...
        -> http://dqw8nmjcqpjn7.cloudfront.net/0818beb7b10ce9a058cd21d85cfe1dcd233e98b7342d32e9a5d4bebe98347f01
        Installing ruby-2.1.3...
        Installed ruby-2.1.3 to /home/vagrant/.rbenv/versions/2.1.3
      • Хэрэв доорх алдаа гарсан бол sudo yum -y install openssl-devel ийг ажиллуулах
      • .........
        BUILD FAILED (CentOS Linux 7 using ruby-build 20150130)
        Inspect or clean up the working tree at /tmp/ruby-build.20150207090250.3881
        Results logged to /tmp/ruby-build.20150207090250.3881.log
          ..........
          ..........

    3. Default - р хэрэглэх ruby - ийн version - ийг сонгох
      • rbenv global 2.1.3
    4. Ruby - ийн version шалгах
      • ruby -v
      • Үр дүн
      • ruby 2.1.3p242 (2014-09-19 revision 47630) [x86_64-linux]
  5. Rails
    1. multi_json - ийг суулгах
      • gem install multi_json -v '1.10.1'
      • Үр дүн
      • Fetching: multi_json-1.10.1.gem (100%)
        Successfully installed multi_json-1.10.1
        Parsing documentation for multi_json-1.10.1
        Installing ri documentation for multi_json-1.10.1
        Done installing documentation for multi_json after 1 seconds
        1 gem installed
    2. Bundler - ийг суулгах
      • rbenv exec gem install bundler
      • Үр дүн
      • Fetching: bundler-1.7.12.gem (100%)
        Successfully installed bundler-1.7.12
        Parsing documentation for bundler-1.7.12
        Installing ri documentation for bundler-1.7.12
        Done installing documentation for bundler after 4 seconds
        1 gem installed
    3. rbenv rehash - ийг ажиллуулах
      • rbenv rehash
    4. Rails - н version - ийг шалгах
      • gem search -r rails | grep "^rails ("
      • Үр дүн
      • rails (4.2.0)
    5. Rails gem - ийг суулгах
      • gem install rails
      • Үр дүн
      • Fetching: thread_safe-0.3.4.gem (100%)
        Successfully installed thread_safe-0.3.4
        Fetching: minitest-5.5.1.gem (100%)
        Successfully installed minitest-5.5.1
        Fetching: tzinfo-1.2.2.gem (100%)
          ......................................
        Installing ri documentation for tzinfo-1.2.2
        Done installing documentation for actionmailer, actionpack, actionview, activejob, activemodel, activerecord, activesupport, arel, builder, erubis, globalid, hike, i18n, loofah, mail, mime-types, mini_portile, minitest, nokogiri, rack, rack-test, rails, rails-deprecated_sanitizer, rails-dom-testing, rails-html-sanitizer, railties, sprockets, sprockets-rails, thor, thread_safe, tilt, tzinfo after 736 seconds
        32 gems installed
    6. .bash_profile - ийг ачаалах
      • source ~/.bash_profile
    7. Шинэ project үүсгэх
      • rails new [үүсгэх project - ийн нэр]
      • Үр дүн
      • create
        create README.rdoc
        create Rakefile
        create config.ru
        create .gitignore
        create Gemfile
        create app
          ................
          ................

      • Хэрэв bundle install хийх үед доорх алдаа гарвал sudo yum -y install sqlite-devel ийг ажиллуулах
      • Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

            /home/vagrant/.rbenv/versions/2.1.3/bin/ruby extconf.rb 
        checking for sqlite3.h... no
        sqlite3.h is missing. Try 'port install sqlite3 +universal',
      • ................
        ................
    8. Gemfile - ийг нээж өөрчлөх
      • vi cat/Gemfile 
        • 15дахь мөрийг комментийг авах 
        • gem 'therubyracer', platforms: :ruby
        • #gem 'byebug' ийг коммэнт болгох
    9. Gemfile - ийг өөрчилсөн үед bundle install хийнэ
      • bundle install --path vendor/bundle
Хэрэггүй Gem ийн нэр Gemfile дотор чинь байвал авч хаяаад bundle-ийг ахин install хийвэл болох учир өөрөө дуртай Gem ийг интернэт эсвэл https://rubygems.org/gems гэсэн сайтаас хайж авч болно. Ингээд орчингоо бэлдэж дууслаа. Харин өмнө нь виндовс дээр виртуал машин руу хандахад уг нь виртуал машин дахь Centos-ийнхоо iptables-ийг хааж өгөөд хандаж болоод байсан гэтэл сайн болж өгдөггүй жаахан g ахаас асуусан энд Rails - ийн өөрийнх нь өөрчлөлт юм байх rails - ийг асаах үед доорх маягаар зааж өгөх хэрэгтэй гэнэ.

bundle exec rails server -b 0.0.0.0

Доорх хаягуудаар лавлах боломжтой.

http://qiita.com/Salinger/items/20f466ffe7cc0c04b010
http://railsguides.jp/4_2_release_notes.html

За ингээд http://192.168.33.10:3000/ хаягаар доорх дэлгэц гарч ирвэл та амжилттай суулгасан гэсэн үг.



Дээрх зааварыг блогт бичихдээ алдаатай бичсэн зүйл байж болзошгүй тул анхаарч үзэх эсвэл доор комментоор үлдээвэл талархах болно. Дараа заваараа Rails - тай холбоотой бичлэгүүд  үргэлжлүүлэн оруулахыг хичээх болно.

Доорх facebook group-д бас зарим нэг постуудыг оруулах болно. Одоохондоо хаалттай байгаа. Яваандаа мэдээлэлээ жаахан нэмж байгаад нээлттэй груп болгох бодолтой байна. Тиймээс энэ груп руу орох хүсэлтэй хүн байвал чөлөөтэй хүсэлт явуулж болно.

https://www.facebook.com/groups/1513847342202817/

Хүндэтгэсэн Х.Мөнхбат