Tag Archive composer

แก้ composer, npm ผ่าน proxy แล้วไม่ทำงาน

เป็นเรื่องปกติที่เน็ตใน office ใหญ่ๆ มันจะอยู่หลัง proxy ที่จะกรองข้อมูลเข้าออก แต่แปลกคือเปิดเว็บใน chrome firefox IE ได้หมด แต่ตัว command line dos ตัวน้อยๆ น่ารัก ที่ติดมากับ windows มีปัญหาไม่สามารถติดตั้ง package ต่างๆ ผ่าน composer หรือ npm ได้

เพราะว่าสำนักงานอาจจะใช้ NTLM หรือ Kerberos มาทำเป็น proxy โดยไม่ได้สนใจว่า dos, command line แม้แต่น้องใหม่ powershell อะไรพวกนี้มันต่อเน็ตไม่ได้ 100% ทั้ง ๆ ที่ ping ออกไปได้ เอา url ไปเปิดดูก็ได้ แต่ทั้ง composer ทั้ง npm มันบอกว่าต่อเน็ตไม่ได้ network เค้าก็บอกไม่ได้บล๊อกนะ ทำไม่เป็นแบบนี้ไม่รู้เหมือนกัน

วิธีแก้คือหาโปรแกรม authentication proxy, forward proxy, reverse Proxy มาช่วย เดิมเคยใช้ Cntlm Authentication Proxy โดนเคยเขียน forward proxy ด้วย cntlm ไว้แต่พี่แกแทบจะไม่พัฒนาต่อแล้ว เลยเปลี่ยนมาใช้ Px แทน

การติดตั้ง

  1. สร้าง folder ไว้เก็บโปรแกรม เช่น C:\px
  2. โหลดมาจากหน้า https://github.com/genotrance/px/releases/tag/vHEAD จะมีตัวที่เป็น .exe ให้โหลดมาเก็บไว้ที่ C:\px
  3. เปิด command line แล้ว
    1. cd c:/
    2. cd c:\px
    3. ถ้า proxy ของ office คือ 192.168.1.33 port 3128 ก็พิมพ์
      px –192.168.1.33:3128 –save
    4. px –install
  4. เปิดไฟล์ C:\px\px.ini ตามคู่มือ Configuration ออกมาแก้ เช่น
[proxy]
allow = *.*.*.*
auth =
gateway = 0
hostonly = 0
listen = 127.0.0.1
noproxy = 192.168.1.*
pac =
port = 3129
server = 192.168.1.33:3128
useragent =
username =

[settings]
foreground = 0
idle = 30
log = 0
proxyreload = 60
socktimeout = 20.0
threads = 5
workers = 8

แก้ windows environment สมมุติว่า 3128 คือ port ที่ตั้งไว้ใน [proxy] จะได้

VariableValue
HTTP_PORXYlocalhost:3129
HTTP_PROXY_REQUEST_FULLURI0
HTTPS_PROXYlocalhost:3129
HTTPS_PROXY_REQUEST_FULLURI0

ถ้าไม่เคยตั้งค่า Windows Environment Variables อ่านได้จาก

เปิดไฟล์ C:\Windows\System32\drivers\etc\hosts
แก้จาก

# localhost name resolution is handled within DNS itself.
#	127.0.0.1       localhost
#	::1             localhost

เป็น

# localhost name resolution is handled within DNS itself.
	127.0.0.1       localhost
	::1             localhost

restart แล้วลง composer และ npm ใหม่ ตัวติดตั้งเห็นเห็น Windows Environment Variables แล้วตั้งค่า proxy ให้เอง

เช็คเน็ตตัวย curl

อ่านหัวข้อแล้วอาจจะงงทำไม่ไม่เปิดกับ browser ละง่ายจะตาย ความจริงคือ composer มันไม่สามารถติดตั้งอะไรได้เลย แม้แต่ตัวมันเอง แต่สามารถใช้ command ping ได้ปกติ คนทำ proxy ก็บอกของเค้าปกติ เลยต้องใช้ curl มาเปิดเว็บดู

ทดลองโดยใช้ [code language=”text” title=”curl open web”]curl -v http://pitt.plusmagi.com[/code] ที่นี้เห็นชัดเลยว่า มันไม่ผ่าน authen ของ proxy ทั้งๆ ที่เปิดเว็บเข้าไปดูอะไรต่ออะไรได้ปกตินั่นละ url เดียวกัน port เดียวกัน แต่ดึงข้อมูลกับ command กลับไม่ได้ ไม่เอา ผล ให้ดูนะเดี๋ยวชื่อ server เค้าจะหลุดออกมาข้างนอก แต่มันบอกตรงตัวเลยว่า ติด authen ที่ ntlm proxy มันนี่ละไม่ต้องหาอื่นไกล ทดลองอีกทีโดยใช้ [code language=”text” title=”curl open web with proxy”]Curl -x { proxy name / proxy ip }:{ port } –proxy-user { domain name ตอน login windows }\{ username }: password -L http://pitt.plusmagi.com[/code] username, password และ domain ก็ตัวที่ใช้ออกเน็ตนี่ละ ดูจากผล command line ออกเน็ตผ่าน proxy ได้แล้วละ

เจอสาเหตุแล้วที่นี้เรามาแก้ให้ออกเน็ตกับ command line ได้กัน forward proxy ด้วย cntlm

CodeIgniter: Composer

โดยปกติ composer จะเก็บไฟล์โดยสร้าง folder vendor ใน folder เดียวกับไฟล์ composer.json

ใน codeinigter ว่างไฟล์ composer.json ไว้นอกสุดแต่ในไฟล์ \application\config\config.php กลับเขียน[code language=”php” title=”\application\config\config.php”]/*
|————————————————————————–
| Composer auto-loading
|————————————————————————–
|
| Enabling this setting will tell CodeIgniter to look for a Composer
| package auto-loader script in application/vendor/autoload.php.
|
| $config[‘composer_autoload’] = TRUE;
|
| Or if you have your vendor/ directory located somewhere else, you
| can opt to set a specific path as well:
|
| $config[‘composer_autoload’] = ‘/path/to/vendor/autoload.php’;
|
| For more information about Composer, please visit http://getcomposer.org/
|
| Note: This will NOT disable or override the CodeIgniter-specific
| autoloading (application/config/autoload.php)
*/[/code]คือ พี่แกให้เก็บไฟล์ไว้ที่ application/vendor ไม่ใช่ /vendor

ปัญหานี้แก้ได้โดยเพิ่ม[code language=”javascript” title=”composer.json”]{

"config": {
"vendor-dir": "application/vendor"
},

}[/code]หลังจากนั้นก็ไปเปิด auto-load โดยเปลี่ยน[code language=”php” title=”\application\config\config.php”]$config[‘composer_autoload’] = false;[/code]เป็น[code language=”php” title=”\application\config\config.php”]$config[‘composer_autoload’] = true;[/code]แล้วทดลองใช้ command[code language=”text” title=”command”]composer update[/code]จะเห็นว่าไฟล์เข้าไปที่ application/vendor แล้ว

ถ้า composer โหลดไฟล์มาไม่ได้เพราะติด proxy อ่าน

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

สร้าง project ใหม่โดยใช้ composer

เดี่ยวนี้ framework ต่างๆก็ใช้ package manager อย่าง composer ติดตั้ง library ต่างๆ รวมทั้งติดตั้ง framework อื่นๆ อย่าง jQuery ถ้าต้องการที่จะสร้างโครงการของเราเองก็ทำได้ง่ายๆ

  1. สร้าง folder ใหม่ขึ้นมา เช่น C:\xampp\htdocs\snippets
  2. พิมพ์[code language=”text” title=”command”]composer init[/code]
  3. ตอบคำถามไปตามละดับ เช่น [code language=”text” title=”command”]
    D:\>cd D:\xampp\htdocs\snippets

    D:\xampp\htdocs\snippets>composer init

    Welcome to the Composer config generator

    This command will guide you through creating your composer.json config.

    Package name (<vendor>/<name>) [pitt.p/snippets]: pitt/snippets
    Description []: code snippets
    Author [, n to skip]: Pitt Phunsanit <[email protected]>
    Minimum Stability []: stable
    Package Type (e.g. library, project, metapackage, composer-plugin) []: project
    License []: mit

    Define your dependencies.

    Would you like to define your dependencies (require) interactively [yes]? yes
    Search for a package: jquery

    Found 15 packages matching jquery

    [0] components/jquery
    [1] frameworks/jquery
    [2] contao-components/jquery
    [3] yiisoft/jquery
    [4] etdsolutions/jquery
    [5] ovidentia/jquery
    [6] mygento/jquery
    [7] quickapps-plugins/jquery
    [8] intelogie/jquery
    [9] apnet/jquery
    [10] jquery/jquery
    [11] yepsua/jquery4php
    [12] venne/jquery2.0-module
    [13] sonata-project/jquery-bundle
    [14] blueimp/jquery-file-upload

    Enter package # to add, or the complete package name if it is not listed: 0
    Enter the version constraint to require (or leave blank to use the latest version):
    [/code]

  4. ตอบคำถามไปเรื่อยๆ รูปแบบ packages จะสัมพันกับ url ใน github เช่น https://github.com/jquery/jquery ถ้าไม่ทราบหาได้ขากเว้บ packagist.org จนสุดท้ายจะสร้างไฟล์ composer.json ขึ้นมา[code language=”javascript” title=”composer.json”]
    {
    "authors": [{
    "email": "[email protected]",
    "homepage": "https://pitt.plusmagi.com",
    "name": "pitt phunsanit",
    "role": "Developer"
    }],
    "description": "snippet",
    "homepage": "https://pitt.plusmagi.com",
    "license": "mit",
    "minimum-stability": "stable",
    "name": "pitt/snippet",
    "require": {
    "ckeditor/ckeditor": "*",
    "components/jquery": "*",
    "components/jquery-migrate": "*",
    "components/jqueryui": "*",
    "phpoffice/phpexcel": "^1.8",
    "twbs/bootstrap": "*"
    },
    "type": "project"
    }[/code]
  5. โหลด library โดยคำสั่ง[code language=”text” title=”command”]composer update[/code]

ไฟล์จุถูกเก็บในโฟลเดอร์ vendor/xxx/yyy อย่างเรียบร้อยและเหมือนกันทุกเครื่องถ้าลง package เดียวกัน version เดียวกัน

ติดตั้ง composer แบบ manual

ต้องลง composer แต่ไม่มีสิทธิติดตั้งโปรแกรม หรือต้องลงหลายเครื่องๆ การลงแบบ manual จะเร็วกว่า

ติดตั้งโดย

  1. สร้างโฟลเดอร์ ขึ้นมา โดยปกติจะอยู่ที่ C:\ProgramData\ComposerSetup\bin
  2. สร้างไฟล์ composer.bat
    [code language="text" title="composer.bat"] @echo OFF
    :: in case DelayedExpansion is on and a path contains !
    setlocal DISABLEDELAYEDEXPANSION
    php "%~dp0composer.phar" %*[/code]
  3. download composer.phar มาจาก Download Composer มา save ไว้
  4. เพิ่ม Path variable ตามวิธี แก้ / เพิ่ม windows environment variables registry
  5. ทดสอบโดยใช้ command
    [code language="text" title="command"] composer –v[/code]

ถ้ายังใช้ไม่ได้ ให้ restart explorer.exe จากนั้นเปิด command line ใหม่ลองเช็คอีกครั้ง จะได้ไม่ต้อง restart windows ใหม่

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

Yii2 Fixed jQuery version

งานที่ทำใช้ jQuery plugin ที่จำกัดอยู่ที่ไม่เกินเวอร์ชั่น 2.1.3 เท่านั้น แต่ทุกครั้งที่ update yii โดยใช้คำสั่ง composer update มันจะเปลี่ยนเจคิวรี่เป็นตัว 2.1.4 ทุกครั้ง ต้องมาเปลี่ยนทุกครั้งเลย แก้ได้โดยไปสั่งใช้คอมโพสเซอร์โหลดตัวที่ต้องการมา

  1. แก้ composer.json เพิ่ม
    [code language=”php” title=”composer.json”]
    "require": {

    "components/jquery": "2.1.3"

    },
    [/code]
  2. ไปใช้ command พิมพ์ composer update มันจะโหลดเจคิวรี่มาเก็บไว้ที่ \vendor\components\jquery
  3. สั่งให้ยีสองโหลด jquery ตัวนี้มาใช้โดยกำหนด
    [code language=”php” title=”main.php”]

    ‘components’ => [

    ‘assetManager’ => [
    ‘bundles’ => [
    ‘yii\web\JqueryAsset’ => [
    ‘baseUrl’ => ‘@web’,
    ‘js’ => [
    ‘../../vendor/components/jquery/jquery.min.js’,
    ],
    ‘sourcePath’ => null
    ],
    ],
    ],

    [/code]

yii จะเปลี่ยน link จาก[code lang=”html”]<script src="/YiiAdvanced/frontend/web/assets/41df07c8/jquery.js"></script>
[/code]เป็น[code lang=”html”]<script src="/YiiAdvanced/frontend/web/../../vendor/components/jquery/jquery.min.js"></script>[/code]หลังจากนี้ถึงจะอัพเดตกี่ครั้ง jquery ก็จะยังเป็นตัวเดิมอยู่

ติดตั้ง 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 นะครับ