Saturday, November 28, 2015

rails + devise + rails_admin + cancan тохиргоо

Rails дээр хэрэглэгчийн эрхийг зохицуулах хүртэлх алхамыг devise + rails_admin + cancan ашиглан хялбар туршилтын ноорог бичив.

  ※item гэсэн модел өмнө нь үүсгэсэн байсан.
  ※Доорх мэдээллийг яаруу бичсэн тул зарим нэг дэс дараалал өөрчлөгдсөн байвал өршөөж ажаам уу m(_ _)m

Орчин
  • CentOS release 6.5
  • ruby (2.1.1p76)
  • rails (4.2.4) 
  • mysql (5.6)
  • devise (3.5.2)
  • cancancan (1.13.1)
  • rails_admin (0.7.0)
1. Gemfile-д gem ийг нэмж өгнө.
  • gem 'devise'
  • gem 'cancancan'
  • gem 'rails_admin'
2. bundle install

3. devise - тохиргоо
  • rails g devise:install
4. config/environments/development.rb ийг өөрчлөнө

  config.action_mailer.default_url_options = { :host => 'localhost:3000' }

5. app/views/layouts/application.html.erb ийг өөрчилнө.

  <%= yield %> ийн дээд талд оруулж өгнө

  <% if notice %>
  <p class="alert alert-notice"><%= notice %></p>
  <% end %>
  <% if alert %>
    <p class="alert alert-error"><%= alert %></p>
  <% end %>

6. Devise ийн хэрэглэгч болон role ийг үүсгэнэ.
  • rails g devise user
  • rails g model role name
  • rails g migration CreateJoinTableUserRole user role
  • rake db:migrate
7. app/models/user.rb моделийг өөрчилнө

  has_and_belongs_to_many :roles

  def has_role?(name)
    self.roles.where(name: name).length > 0
  end

8. app/models/role.rb моделийг өөрчилнө

  has_and_belongs_to_many :users

9. cancan - ийн тохиргоо
  • rails g cancan:ability
10. app/models/ability.rb ийг өөрчилнө

  def initialize(user)
    if user.has_role?('superadmin')
      can :manage, :all
    elsif user.has_role?('admin')
      can :read, :all
      can :access, :rails_admin
      can :dashboard
    elsif user.has_role?('manager')
      can :read, :all
      can :access, :rails_admin
      can :dashboard
    else
      can :read, Item
    end
  end

  Дээрх тохиргоог оруулж өгсөнөөр admin, superadmin, manager зэрэг хэрэглэгчийн role - с хамаарч
  can болон cannot-оор хэрэглэгчидийн эрхийг зааж өгөх боломжтой.
  Дээрх тохиргоог item модел дээр туршилтаар оруулсан болно.

11. rails_admin ийг тохиргоо
  • rails g rails_admin:install
  • rake db:migrate
12. config/initializers/rails_admin.rb ийг өөрчилнө.

  Доорх мөрнүүд коммент болсон байгаа бөгөөд. Комментыг авах

  # config.authenticate_with do
  #   warden.authenticate! scope: :user
  # end
  # config.current_user_method(&:current_user)

  болон

  # config.authorize_with :cancan

13. config/environments/development.rb ийг өөрчилж имэйлийн тохиргоог хийнэ.

  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
    :address => 'smtp.gmail.com',
    :port => 587,
    :authentication => :plain,
    :user_name => 'имэйл',
    :password => 'имэйлий нууц үг'
  }

14. config/initializers/rails_admin.rb ийг өөрчилнө

  config.sign_out_via = :delete ийг config.sign_out_via = :get болгох

15. db/migrate/*_devise_create_users.rb ийг өөрчлөх
  Доорх мөрнүүд коммент болсон байгаа бөгөөд. Комментыг авах

  ## Confirmable
  # t.string   :confirmation_token
  # t.datetime :confirmed_at
  # t.datetime :confirmation_sent_at
  # t.string   :unconfirmed_email # Only if using reconfirmable

16. app/models/user.rb ийг өөрчлөх

  Доорх шиг , :confirmable ийг нэмж өгнө
   devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable, :confirmable

17. Доорх өгөгдлүүдийг оруулж өгнө
  • Item
  • User
  • Role

18. Rails ийг ачаалах

  rails s -b 0.0.0.0

Superadmin role - р нэвтрэх үеийн дэлгэц



manager role - р нэвтрэх үеийн дэлгэц




Мэдээлэл
  http://qiita.com/umanoda/items/679419ce30d1996628ed
  http://qiita.com/cigalecigales/items/73d7bd7ec59a001ccd74
  http://d.hatena.ne.jp/htz/20140718/1405690417
  http://codeonhill.com/devise-cancan-and-activeadmin/

Thursday, November 26, 2015

Rails Devise монгол орчуулга

Тохиргоо
  • Орчуулгыг файл болгон devise_mn.yml нэртэй /config/locales - д хадгална
  • /config/application.rb - н хэлний тохиргоог өөрчилнө
    • config.i18n.default_locale = :mn

       

# Additional translations at https://github.com/plataformatec/devise/wiki/I18n



mn:

  devise:

    confirmations:

      confirmed: "Бүртгэл идэвхижлээ."

      send_instructions: "Бүртгэлийг идэвхижүүлэх заавартай имэйл удахгүй илгээнэ."

      send_paranoid_instructions: "Та бүртгүүлсэн бол удахгүй танд бүртгэлээ хэрхэн идэвхижүүлэх заавартай имэйл очих болно."

    failure:

      already_authenticated: "Та аль хэдийн нэвэрсэн байна."

      inactive: "Таны бүртгэл идэвхижээгүй байна."

      invalid: "Нууц үг эсвэл имэйл буруу байна."

      locked: "Таны хаяг түгжигдсэн байна."

      last_attempt: "Таны хаяг 1 үйлдлийн дараа түгжигдэнэ."

      not_found_in_database: "Нууц үг эсвэл имэйл буруу байна."

      timeout: "Дахин логин хийж нэвтэрнэ үү."

      unauthenticated: "Та бүртгүүлнэ үү."

      unconfirmed: "Бүртгэл идэвхижээгүй байна."

    mailer:

      confirmation_instructions:

        subject: "Идэвхижүүлэх заавар"

      reset_password_instructions:

        subject: "Нууц үгийг ахин өөрчлөх"

      unlock_instructions:

        subject: "Түр түгжигдсэн аккаунтыг идэвхижүүлэх заавар"

    omniauth_callbacks:

      failure: "%{kind} баталгаажуулсангүй. Шалтгаан:%{reason}"

      success: "%{kind} баталгаажууллаа."

    passwords:

      no_token: "Энэ хуудас руу хандах боломжгүй. Хаягаа зөв эсэхийг шалгаад дахин оролдоно уу."

      send_instructions: "Нууц үг сэргээх зааварыг удахгүй имэйлээр илгээнэ."

      send_paranoid_instructions: ""

      updated: "Нууц үг амжилттай өөрчлөгдлөө."

      updated_not_active: "Нууц үг амжилттай өөрчлөгдлөө."

    registrations:

      destroyed: "Бүртгэлийг амжилттай устгалаа."

      signed_up: "Бүртгэлийг хүлээн авлаа."

      signed_up_but_inactive: "Бүртгэл амжилттай. Бүртгэл идэвхижсэний дараа та ашиглах боломжтой."

      signed_up_but_locked: "Бүртгэл амжилттай. Хаяг түр хугацаанд түгжигдсэн байгаа тул ашиглах боложмгүй байна."

      signed_up_but_unconfirmed: "Бүртгэлийг идэвхижүүлэх имэйл илгээгдлээ. Имэйл доторх бүртгэл идэвхижүүлэх линк дээр дарж бүртгэлээ идэвхижүүлнэ үү."

      update_needs_confirmation: "Мэдээлэл амжилттай шинэчлэгдлээ. Таны хаягыг баталгаажуулах шаардлагатай тул доорх линк дээр дарж идэвхижүүлнэ үү."

      updated: "Таны бүртгэл шинэчлэгдлээ."

    sessions:

      signed_in: "Амжилттай нэвтэрлээ."

      signed_out: "Амжилттай гарлаа."

    unlocks:

      send_instructions: "Бүртгэлийг дахин идэвхижүүлэх заавр имэйлээр илгээгдлээ."

      send_paranoid_instructions: "Таны мэдээлэл бүртгэлтэй бол дахин идэвхижүүлэх имэйлийг илгээнэ."

      unlocked: "Таны бүртгэл түр идэвхигүй боллоо."

  errors:

    messages:

      already_confirmed: " аль хэдийн бүртгүүлсэн байна. Та нэврэнэ үү."

      confirmation_period_expired: "%{period} -ний дотор баталгаажна. Ахин хүсэлт илгээнэ үү."

      expired: "эрх дууссан байна. Ахин бүртгүүлнэ үү."

      not_found: " олдсонгүй."

      not_locked: " түгжигдээгүй байна."

      not_saved:

        one: "Доорх алдаанаас болж %{resource} -ийг хадгалж чадсангүй."

        other: "%{count} алдааны улмаас %{resource} -ийг хадгалж чадсангүй:"

 

Friday, November 6, 2015

Mysql socket алдаа

Доорх алдааг засах

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'

Эхлээд socket файл байгаа эсэхийг шалгана
$ ls -al /var/lib/mysql/

Байхгүй бол үүсгэнэ
$ sudo touch /var/lib/mysql/mysql.sock

Эрхийг өөрчилнө
$ sudo chown mysql:mysql /var/lib/mysql

Mysql ийг дахин ачаална
$ sudo /etc/init.d/mysqld restart

/etc/my.cnf ийг өөрчилөөгүй бол дээрхээр болох байх

Ruby on rails дээр 'mysql2' for database adapter алдаа

rails 4.2.4 дээр шинэ прожект үүсгээд bundle install хийгээд scaffold хийсэн чинь доорх алдаа гарав.

Specified 'mysql2' for database adapter, but the gem is not loaded. Add `gem 'mysql2'` to your Gemfile (and ensure its version is at the minimum required by ActiveRecord). (Gem::LoadError)

Gemfile даа version ийг нь зааж өгөөд bundle install хийнэ.
gem 'mysql2', '~> 0.3.20'


http://qiita.com/shizuma/items/0f9660d5d46a0012eb9e