Tag Archive environment

C#: Configurations

C# จะเก็บ configurations อย่าง connection strings ไว้ในไฟล์ app.config หรือ web.config เวลา compiled โปรแกรมไปไว้ที่เครื่อง user แล้วเหมือนมันจะเปิดเผยไปหน่อย แถมเวลาเปลี่ยน environment จาก dev ไป uat อะไรแบบนี้ทีก็มาแก้กันที ถ้าแค่ database ตัวเดียวยังไม่เท่าไหร่ แต่ถ้าต้องติดต่อหลายก้อน แล้วต้องสลับไปมา ตอนที่แก้บัคพร้อม uat นี่พลาดได้ง่ายๆ
วิธีที่นิยมกันก็คือสร้าง class ขึ้นมาใหม่ แล้วใช้ config เอาจาก class แทน เช่น ไฟล์ Configurations.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PrototypesCSharp
{
    class Configurations
    {
        public static string environment = "DEV"; // DEV, UAT, PRODUCTION

        public static Dictionary<string, string> DSNs()
        {

            var dsns = new Dictionary<string, string>();

            switch (Configurations.environment)
            {

                case "DEV":
                    {
                        dsns["dns1"] = "Server=127.0.0.1;Database=prototype_DEV;User Id=pitt;Password=phunsanit";
                        dsns["dns1_replicate"] = "Server=127.0.0.1;Database=prototype_DEV;User Id=pitt;Password=phunsanit";
                        dsns["dns2"] = "Server=127.0.0.1;Database=prototype_DEV;User Id=pitt;Password=phunsanit";
                        dsns["dns2_replicate"] = "Server=127.0.0.1;Database=prototype_DEV;User Id=pitt;Password=phunsanit";
                    }
                    break;

                case "PRODUCTION":
                    {
                        dsns["dns1"] = "Server=127.0.0.1;Database=prototype;User Id=pitt;Password=phunsanit;";
                        dsns["dns1_replicate"] = "Server=127.0.0.1;Database=prototype;User Id=pitt;Password=phunsanit;";
                        dsns["dns2"] = "Server=127.0.0.1;Database=prototype;User Id=pitt;Password=phunsanit;";
                        dsns["dns2_replicate"] = "Server=127.0.0.1;Database=prototype;User Id=pitt;Password=phunsanit;";
                    }
                    break;

                case "UAT":
                    {
                        dsns["dns1"] = "Server=127.0.0.1;Database=prototype_UAT;User Id=pitt;Password=phunsanit";
                        dsns["dns1_replicate"] = "Server=127.0.0.1;Database=prototype_UAT;User Id=pitt;Password=phunsanit";
                        dsns["dns2"] = "Server=127.0.0.1;Database=prototype_UAT;User Id=pitt;Password=phunsanit";
                        dsns["dns2_replicate"] = "Server=127.0.0.1;Database=prototype_UAT;User Id=pitt;Password=phunsanit";
                    }
                    break;

            }

            return dsns;
        }

    }
}

เวลาจะใช้ในฟอร์มอื่นก็แค่เรียกใช้อย่าง

        string dns1 = Configurations.DSNs()["dns1"].ToString();
        SqlConnection objConn = new SqlConnection(dns1);

แบบนี้ถ้าอยากจะเปลี่ยน environment จาก DEV, UAT หรือ PRODUCTION ก็เปลี่ยนแค่ public static string environment = “DEV”; // DEV, UAT, PRODUCTION บรรทัดเดียว ก็ได้แล้ว ถ้ามี database อื่นหรือคอนฟิกอื่นๆ ก็แค่เพิ่มรายการเข้าไป ตามที่ใช้

เพื่อให้ง่ายในการดูว่าโปรแกรมเรากำลังใช้ environment ตัวไหนอยู่อาจจะใช้วิธีอย่าง C#: แสดง program version

set Environment โดย command line

เราสามารถเซ็ต Environment Variables ได้โดยใช้ command line ง่ายๆ แค่พิมพ์ set หรือ setx เท่านั้นเอง

ก่อนอื่นก็ดูก่อนว่า Environment Variable ตัวนี้เซ็ตเอาไว้รึยัง รูปแบบคือ echo %{variable name}% ตัวอย่าง echo %path% ถ้ามีค่าจะได้ค่าออกมา ถ้าไม่เคยมีมาก่อนจะ retuen %{variable name}% กลับมา

ใน windows จะไม่สนใจตัวเล็กตัวใหญ่ (case insensitive) ดังนั้นตัวแปรที่เซ็ตชื่อ PATH หรือ path ก็คือตัวเดียวกัน

ถ้าใช้ windows 10 build ใหม่ๆ สามารถใช้ คำสั่ง setx รูปแบบคือ setx {variable name} {variable name} เช่น setx http_proxy 127.0.0.1:3128 หรือ setx https_proxy 127.0.0.1:3128

ถ้า windows ที่เก่ากว่านั้นก็ใช้ set เช่น set http_proxy=”127.0.0.1:3128″ หรือ set https_proxy=”127.0.0.1:3128″ ต่างกันที่ มี x กับ ไม่มี x แค่นั้นเหรอ จริงๆแล้ว set ใช้ง่ายกว่ามากโดย

  • จริงๆ ไม่ต้องมี ” ก็ได้นะ จะใช้ set http_proxy=127.0.0.1:3128 หรือ set https_proxy=127.0.0.1:3128 ก็ได้ ถ้าไม่มีพวกสเปส อักษรพิเศษอยู่ข้างใน
  • เพิ่มค่าเข้าไปได้ง่ายๆ อย่างตัวแปร PATH ที่ใครๆ โปรแกรมไหนๆก็อย่างเข้าไปอยู่ข้างใน แค่ใช้ SET PATH=%PATH%;c:\whatever\else แค่นี้ก็เพิ่มเข้าไปต่อจากตัวเดิมแล้ว
  • เอา Environment Variables ออกไปได้ง่ายๆ แค่ไม่ใส่ค่าลงไป set https_proxy แค่นี้ก็ลบออกไปได้แล้ว

อ่านเพิ่มเติม

แก้ / เพิ่ม windows environment variables registry

ปกติจะสามารถแก้ environment variables ได้โดยวิธี How to set the path and environment variables in Windows แต่เพราะว่าเครื่องที่ใช้โดนกำหนดไม่ให้แก้ environment variables ไว้โดย ad จะขอให้ทาง infa แก้ให้ก็ไม่ทัน งานจะต้องส่งภายในวันนี้แต่ทาง admin คนที่เซ็ต ad ได้ดันลา ลองคลิกดูหลายๆจุดก็โดน lock ไว้ โชคดีที่ลองใช้ regedit ดู ก็เห็นว่ามันไม่ได้ lock ไว้ (รั่วนะเนี่ย)

เพราะงั่นเลยแก้มันตรงๆ ใน registry เลยละกัน โดย environment variables จะมี 2 จุดคือ

  • User Variables อยู่ที่ HKEY_CURRENT_USER\Environment
  • System Variables จะอยู่ที่ HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

ตั้งตัวแปรใหม่ โดย new > string value หรือจะแก้ของเดิมที่มีโดยใช้ ; คั่นก็ได้

เสร็จแล้วให้ restart windows หรือแค่ restart windows explorer ก็ได้ เท่านี้ก็จะ set environment variables ได้แล้ว

อ่านเพิ่มเติม

ติดตั้ง yii 2 advance ผ่าน composer

YII เพิ่งออกเวอร์ชั่น 2 มาวันที่ 12 ตุลาคม พ ศ 2557 เลยเอามาลองของซักหน่อย ก่อนอื่นให้ลง composer สำหรับติดตั้งตามยุคสมัย (จริงๆ โหลด zip มาแตกเองง่ายกว่าด้วยซ้ำไป ถ้าไม่ต้องการใช้ composer ให้โหลด zip มาแล้วข้ามขั้นตอนที่ 1 ไปเลยครับ)

  1. ก่อนอื่น update เจ้า composer ซะก่อนตามธรรมเนียม รีสตาร์ต เพื่อป้องกันปัญหาเปิด command ออกมาพิมพ์
    [code language=”text”]
    composer self-update
    [/code]
    ลง composer asset plugin ทำครั้งเดียวไม่ต้องทำอีก
    [code language=”text”]
    composer global require "fxp/composer-asset-plugin:1.0.0"
    [/code]
    โดยปกติ จะสร้าง yii project ได้โดยคำสั่ง
    [code language=”text”]
    composer create-project –prefer-dist yiisoft/yii2-app-basic basic
    [/code]
    composer จะ copy ไปไว้ใน folder ชื่อ basic งานที่จะทำเหมาะกับ yii Advanced Application Template มากกกว่า ที่ต่างกันคือ

    • แยก Front- and และ back-end apps ระบบใหญ่ๆ ควรแยกไว้เพื่อความสะดวกที่สำคัญ yii สามารถใช้ configuration และ model ร่วมกันได้ ทั้ง 2 ฝั่ง
    • User model มีระบบ login, User signup and password restore เบื้องต้นติดมาด้วย

    และต้องการให้เก็บใน D:\xampp\htdocs\YiiAdvanced ให้เปลี่ยนคำสั่งเป็น
    [code language=”text”]
    composer create-project –prefer-dist yiisoft/yii2-app-advanced D:\xampp\htdocs\YiiAdvanced
    [/code]

  2. ปรับสภาพแวดล้อมให้ช่วยเขียน code ได้ง่ายขึ้น
    • ไปที่เราติดตั้ง php ไว้ก่อน พิมพ์
      [code language=”text”]
      cd c:\xampp\php
      [/code]
    • พิมพ์
      [code language=”text”]
      php D:\xampp\htdocs\YiiAdvanced\init
      [/code]
    • เลือก Development พิมพ์ 0 enter ขึ้นจริง 1 enter
  3. สร้าง database
    • สร้าง database เปล่าๆ ไว้ก่อน ของผมชื่อ YiiAdvanceDB
    • ไปที่ common/config/main-local.php ใน folder ที่เราสร้างไว้ เพิ่ม database connection ใน components ตามตัวอย่าง
      [code language=”php”]
      ‘components’ => [
      ‘db’ => [
      ‘class’ => ‘yii\db\Connection’,
      ‘dsn’ => ‘mysql:host=localhost;dbname=YiiAdvanceDB’,
      ‘username’ => ‘root’,
      ‘password’ => ”,
      ‘charset’ => ‘utf8’,
      ],
      [/code]
    • Command กลับไปที่เราเก็บ project file
      [code language=”text”]
      d:
      cd D:\xampp\htdocs\YiiAdvanced
      [/code]
    • พิมพ์
      [code language=”text”]
      yii migrate[/code]
      ตอบ yes ดูในฐานข้อมูล จะมีตาราง user กับ migrate เพิ่มขึ้นมา

การเตรียมโปรเจ็คด้วยยี่สำเร็จแล้ว! หวังว่าคงเข้าใจมากกว่าในคู่มือเว็บ yii นะครับ