Rails Memos

說明

原本是寫 Python 比較多,因為工作上需要用到 Rails,所以這邊紀錄一些常用的指令。

TIPS

  1. Run specific version of bundler

    1
    2
    3
    $ gem install bundler -v 1.17.3
    $ bundle _1.17.3_ install
    # 使用特定版本的 bundler 安裝 gem
  2. bundler-audit

    1
    2
    3
    $ bundle-audit update
    $ bundle-audit check
    # 檢查 gem 是否有安全漏洞

    有時候呢,因為版本問題實在無法解決,可以使用 bundle-audit check --ignore CVE-2023-XXXX 忽略特定的漏洞。或是在專案內新增 .bundler-audit.yml 檔案,內容如下:

    1
    2
    3
    4
    ---
    ignore:
    - CVE-YYYY-XXXX
    - ...
  3. Update/Add gem

    1
    2
    3
    4
    $ bundle update <gem_name>
    # 更新 Gemfile.lock 內的 gem
    $ bundle add <gem_name>
    # 新增 gem 到 Gemfile
  4. About gem version

    1
    2
    ~> 1.0.0 # 1.0.0 <= x < 2.0.0
    ~> 1.0 # 1.0.0 <= x < 1.1.0
  5. Print out contents of object

    1
    2
    3
    4
    5
    6
    puts user.inspect
    #=> #<User:0x423270c @name="John Due", @age=45>
    puts user.to_yaml
    #=> --- !ruby/object:User
    #=> age: 45
    #=> name: John Due
  6. Time format 與 Timezone 轉換

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    Time.zone.now
    # => Tue, 13 Apr 2021 01:32:04 UTC +00:00
    Time.now
    # => 2021-04-13 01:32:04 +0000
    Time.zone.now.to_s(:db)
    # => "2021-04-13 01:32:04"
    Time.zone.now.to_s(:short)
    # => "13 Apr 01:32"
    Time.zone.now.to_s(:long)
    # => "13 April 2021 01:32"
    Time.zone.now.to_s(:rfc822)
    # => "Tue, 13 Apr 2021 01:32:04 +0000"
    Time.zone.now.to_s(:iso8601)
    # => "2021-04-13T01:32:04Z"
    Time.zone.now.to_s(:number)
    # => "20210413013204"
    # 轉換成特定時區
    t = created_at = 2023-07-16 03:00:00 UTC
    t.zone # 查看時區 "UTC"
    t.in_time_zone("Taipei") # 轉換成台北時區與 t.zone = "Taipei" 相同
    => Sat, 16 Jul 2023 11:00:00 CST +08:00
    Time.zone.local_to_utc(t) # 轉換成 UTC 時區
    => 2023-07-16 03:00:00 UTC
    Time.use_zone("Taipei") { Time.zone.local_to_utc(t) }.localtime # 轉換成台北時區
    => 2023-07-16 11:00:00 +0800
    t.asctime.in_time_zone("Taipei") # 轉換成台北時區字串
    => "Sat Jul 16 11:00:00 2023"
    Time.parse(t.asctime.in_time_zone("Taipei")) # 轉換成台北時區時間
    => 2023-07-16 11:00:00 +0800
  7. rbenv Ruby 管理工具

    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ brew install rbenv # 安裝 rbenv on macOS
    $ rbenv versions # 列出所有已安裝的 Ruby 版本
    $ rbenv install -l # 列出所有可安裝的 Ruby 版本
    $ rbenv install 2.7.3 # 安裝 Ruby 2.7.3
    $ rbenv global 2.7.3 # 設定全域 Ruby 版本為 2.7.3
    $ rbenv local 2.7.3 # 設定專案 Ruby 版本為 2.7.3
    $ rbenv shell 2.7.3 # 設定 shell Ruby 版本為 2.7.3
    $ rbenv rehash # 重新建立 Ruby 版本的 shims
    $ rbenv uninstall 2.7.3 # 移除 Ruby 2.7.3
  8. 在 console 裡測試 ActionMailer

    1
    2
    3
    4
    5
    6
    7
    mailer = ActionMailer::Base.new
    # check settings:
    mailer.delivery_method
    mailer.smtp_settings
    # send mail:
    mailer.mail(
    from: 'sneder@example.com', to: 'user@example.com', subject: 'test', body: 'test').deliver

參考資料

  1. Gemfiles
  2. Ruby Gossip
  3. rbenv