cakePHPインストールでハマった話。(intl.so)
Laravelいろいろさわってましたが、とりあえずいろいろPHPフレームワーク触ってみることにしました。
というわけで、cakePHPやってみることに。
composerはインストール済みとします。
ドキュメントに従いインストール
cakePHPのクイックスタートガイドをもとに進めていきます。
webサーバのルートとなるディレクトリに移動。
ビルトインの簡易サーバもつかえるので、適当なディレクトリでいいと思います。
composerのcreate-projectコマンドでcakePHPプロジェクトを導入します。
$ composer create-project --prefer-dist cakephp/app test Problem 1 - cakephp/cakephp 3.1.7 requires ext-intl * -> the requested PHP extension intl is missing from your system. - cakephp/cakephp 3.1.6 requires ext-intl * -> the requested PHP extension intl is missing from your system. - cakephp/cakephp 3.1.5 requires ext-intl * -> the requested PHP extension intl is missing from your system. - cakephp/cakephp 3.1.4 requires ext-intl * -> the requested PHP extension intl is missing from your system. - cakephp/cakephp 3.1.3 requires ext-intl * -> the requested PHP extension intl is missing from your system. - cakephp/cakephp 3.1.2 requires ext-intl * -> the requested PHP extension intl is missing from your system. - cakephp/cakephp 3.1.1 requires ext-intl * -> the requested PHP extension intl is missing from your system. - cakephp/cakephp 3.1.0 requires ext-intl * -> the requested PHP extension intl is missing from your system. - Installation request for cakephp/cakephp ~3.1 -> satisfiable by cakephp/cakephp[3.1.0, 3.1.1, 3.1.2, 3.1.3, 3.1.4, 3.1.5, 3.1.6, 3.1.7].
なんかエラー出てるみたい。
どうも、intl
というPHP拡張が無いようです。
intlの導入
調べてみると、peclつかったりしないといけなそう。
CakePHP3.0をインストールしてみる(自分用めもめも - Qiita
うーん。
とりあえず、yumコマンドでintl
が無いか探してみる。
$ yum list | grep intl
php-intl.x86_64 5.6.16-1.fc23 updates
あった!!!!もしかして、これ入れればいけるんじゃ・・・?
// php-intlをインストール $ sudo yum install php-intl //phpコマンドで確認 $ php -i | grep intl /etc/php.d/20-intl.ini, intl intl.default_locale => no value => no value intl.error_level => 0 => 0 intl.use_exceptions => 0 => 0
いけた!!!
最後に、/etc/php.ini
にextension=intl.so
を追加。
もう一度インストール!
一度インストールしたディレクトリをすべて削除して、もう一度composerでcakePHPをインストール。
$ composer create-project --prefer-dist cakephp/app test Writing lock file Generating autoload files Set Folder Permissions ? (Default to Y) [Y,n]? Y
途中、ディレクトリのパーミッションを変更するか確認されるので、「Y」で応答。
1回目のブラウザ確認
ブラウザから、http://localhost
にアクセスして確認。
あれ、見れない。そもそもwebサーバが落ちてる。しかも上がらない。。。
しらべてみると、ダミーのindex.html
が必要とのこと。内容は空か、<html></html>
でいいみたい。
ドキュメントルートにindex.html
を追加。もう一度、apacheを起動。お、あがってきた。
2回目のブラウザ確認
再度、http://localhost
へアクセス。
それっぽい画面が出たけど、、、、パーミッションエラー。
このパターン最近見たぞ、と思ってSELINUXのコンテキストを変更。
chcon -R -t httpd_sys_rw_content_t .
(詳しくは前の記事を参照。)
最後のブラウザ確認
3度目の正直、http://localhost
へアクセス。
いけたー!ケーキのイラストが表示された!
webアプリはセキュリティとかパーミッションでいっつもやられるなー。
というわけで、今日からcakePHPで遊んでみます。
laravel5のインストールで、ファイルパーミッションエラー
半年以上ぶりの更新が、さっきまで5時間くらいハマった内容です。
今後、ハマらないようにメモ。
やったこともないPHPでいきなりlaravelなんていうフレームワークのしかも最新版だったから情報がなかった。
経緯
ハマるまでの流れは、laravel5のドキュメントに沿って laravelのインストールを進めていたところだった。
// composerでlaravel5をインストール $ composer global require "laravel/installer=~1.1" // laravelプロジェクトを展開するディレクトリへ移動 $ cd /var/www // wwwディレクトリ下にlaravelというプロジェクトを作成する。 $ laravel new laravel
最後に、apacheのルートディレクトリを変更し、.htaccessを有効にする。
$ sudo vi /etc/httpd/conf/httpd.conf // ドキュメントルートを/var/www/laravel/publicへ変更 DocumentRoot "/var/www/laravel/public" // Directoryも同じように変更 // AllowOverride All でhtaccessを有効化。 <Directory "/var/www/laravel/public"> AllowOverride All Require all granted </Directory>
ここまでは問題なくいった。
HTTP 500 - 内部サーバー エラー
ドキュメントの指示に従い、storage
とbootstrap/cache
ディレクトリ配下をすべてパーミッションを読書き可能に変更。
ユーザはhttpdのユーザを指定。今回はapache。
// laravelディレクトリ下の所有者・所有グループをapacheに変更。 $ sudo chown -R apache:apache /var/www/laravel // storageディレクトリのパーミッションを775へ変更。 $ sudo chmod -R 775 /var/www/laravel/storage // bootstrap/cacheディレクトリのパーミッションを775へ変更。 $ sudo chmod -R 775 /var/www/laravel/bootstrap/cache
とりあえずここまできたらブラウザから稼働確認できそうだったので、http://localhost:80
で確認。
HTTP 500 - 内部サーバー エラー
なんでだ!
パーミッションを777にしてみたり、所有ユーザ変えてみたり、apacheの設定変えてみたりいろいろしてみたけど、駄目だった。。。。
apache エラーログ
ここまで3時間ほど経ったと思う。
神にすがる思いでapacheのエラーログに何か吐いてないか確認。
~ PHP Fatal error: Uncaught exception 'UnexpectedValueException' with message 'The stream or file "/var/www/laravel/storage/logs/laravel.log" could not be opened: failed to open stream: Permission denied' ~
/var/www/laravel/storage/logs/laravel.log
が書き込めません。パーミッションがありまあせん。みたいなエラー吐いてた。
パーミッション設定してるよ。。。。。
~~
で、いろいろ調べた結果、ここのコマンド実行したらイケた。
Laravel5 gives Blank Page with 500 status code on Apache fedora22
chcon -R -t httpd_sys_rw_content_t /var/www/laravel/storage chcon -R -t httpd_sys_rw_content_t /var/www/laravel/bootstrap/cache
何してるかって、selinuxのファイルコンテキストを書き換えてるんですね。httpd_sys_rw_content_t
に。
ファイルコンテキストには目つけたけど、httpd_sys_rw_content_t
じゃないとだめっていうのにたどり着くまで何時間もかかってしまった。。
しんどい。。。
chconは一時的にファイルコンテキストを変更するコマンドなので、恒久的に変更する場合はsemessage
コマンドとか使ったほうがいいかもね。
もし同じところで躓いている人いれば、助けになればと思います。。。。
以上!
Windows環境でのJenkins導入から、アドレス変更まで
Windows環境にJenkinsをインストールして、アドレス変更までのメモ。
Jenkins内の設定(プラグインの管理など)ではなく、Jenkins導入のためにWindowsで設定すべき内容などです。
目的は下記の通り。
- Jenkinsをインストールする。
- Jenkinsのアドレスをデフォルト(localhost:8080)から変更する。
- Jenkinsを開始することができる。
尚、環境はOSがWindows7(64bit) Professionalで、Apache等ウェブサーバの機能をもたない、普通のクライアント環境です。
Jenkinsのインストール
Jenkinsのインストール自体は難しくありません。
公式ページより、ネイティブパッケージをダウンロード。
ダウンロードされたzipファイルを解凍。
中のsetuo.exe
を実行。
あとは、指示に従いインストールするだけ。インストールフォルダを指定するだけです。
これでとりあえずインストールは完了です。
Jenkinsの起動
インストール後、ブラウザが立ち上がりhttp://localhost:8080
もしくは、127.0.0.1:8080
でJenkinsが開始されます。自動で上がってこなければ、ブラウザでアドレスを直接入力してみてください。
もし開かない場合は、windowsのサービスが開始されているか確認してみてください。タスクバーを右クリックし、タスクマネージャ
を起動し、サービスにJenkins
が開始
になっていればOKです。なければ、コントロールパネル⇒管理ツール⇒サービス
から、Jenkinsを右クリックし、開始してください。起動まで少し時間がかかるので、すぐ見れない場合があるかもしれません。(ここでハマりました。←)
不要かもしれませんが、それでも開かない場合は
コントロールパネル⇒プログラムと機能⇒Windowsの機能の有効化または無効化
より、インターネットインフォメーションサービス
内のweb管理ツール
とWorld Wide Webサービス
を有効にしてみるといいかもしれません。(尚、その二つにチェックを入れると、中の項目は自動で次のようにチェックされるのでそのままでOKです。)
アドレスの変更
http://localhost:8080
は、もしかすると他のweb関連のアプリケーションなどで使用する可能性があるので、任意のアドレスに変えます。今回は、参考にさせていただいたサイトと同じようにhttp://localhost/jenkins
でアクセスできるように設定します。
することは2つです。
- jenkins.xmlを変更
- jenkinsサービスを再起動
2が大事です。1はそんなに難しくないですが、2を意外と忘れます。
jenkins.xmlを変更する
jenkinsをインストールしたフォルダ(デフォルトだとC:\Program Files (x86)\Jenkins
とか)直下の、jenkins.xml
をメモ帳などの適当なテキストエディタで編集します。
変更前 <arguments>-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar "%BASE%\jenkins.war" --httpPort=8080</arguments> ↓ 変更後 <arguments>-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar "%BASE%\jenkins.war" --httpPort=80 --prefix=/jenkins</arguments>
後半の--httpPort=8080
をhttpPort=80 --prefix=/jenkins
のように変更します。
80番ポートは記述不要なので、http://localhost/jenkins
でアクセスできるようになるはずです。
jenkinsサービスの再起動
上記で設定は完了ですが、jenkinsを再起動するまで、設定は反映されません。なので、サービスを再起動させます。
http://localhost:8080
でアクセスしている場合、http://localhost:8080/safeRestart
でjenkinsの再起動が可能です。
windowsのサービスより直接再起動してもOKです。
再起動後は1分くらいで上がってくるので、開始後、http://localhost/jenkins
でアクセスできるかと思います。
以上、あとはアカウント作ったり、プラグイン追加したり自分なりに設定していきます。
ちなみに、windowsのhostsファイル触れば、localhostも変えれるみたい。ネットワーク関係疎くて、躓いたのでメモ程度に。
参考
【ant入門】java自動実行タスクをつくってみた
最近jenkinsを触ってて、改めてAntとかMavenとかのビルドツールについて勉強し始めた。
Antって意外とネットに日本語の解説してくれてるサイトがないので、私は英語のドキュメントで簡単に勉強しました。
日本語のドキュメントもあるので、英語苦手な人はこっちがよさげ。
javaファイルを管理するために、簡単なAntスクリプト?組んだので、メモ程度に。
もし、練習とか検証とかにコピペで使いたい人とかいれば、Antインストール後にソースファイルがあるフォルダにbuild.xml
ファイルを作って、そこにコピペしてください。
ソースファイルフォルダに移動して、コマンドラインからant
を実行で使えます。
antのインストールは割愛します。
build.xml作成
次の通りbuild.xml作りました。
<?xml version="1.0" encoding="Shift_JIS"?> <project name="AntSample" default="exec" basedir="."> <!--source,targetフォルダ作成。ソースファイルコピー--> <target name="init"> <mkdir dir="source" /> <mkdir dir="target" /> <copy todir="source"> <fileset dir="." includes="**.java" /> </copy> </target> <!--コンパイル--> <target name="compile" depends="init"> <javac srcdir="source" destdir="target" encoding="Shift_JIS" includeAntRuntime="false" /> </target> <!--実行--> <target name="exec" depends="compile"> <!--classnameを実行するclass名に変更する--> <!--GUIを伴うので別プロセスで実行。※spawn=true/fork=true--> <java classname="AntSample" classpath="target" spawn="true" fork="true" /> </target> </project>
antはルート要素にproject要素をもち、その中にtarget要素を含むのが基本的な形式。
project要素のname属性、basedir属性、default属性はあった方がいい。(必須ではない。)
- name : project名
- basedir : 基本となるディレクトリ(.で、build.xmlがあるカレントディレクトリ)
- default : ant実行時に、targetを指定しなかった場合、自動で実行されるtarget
target要素には、実際に実行するタスクを記述していきます。
- name : targetを識別する名前
- depends : targetが依存するtargetを指定。指定されたtargetは実行前に必ず実行される。
initのtarget要素では、mkdir要素でソースファイル用のsourceフォルダ、classファイルを出力するtargetフォルダを作成しています。
また、copy要素で、拡張子が.javaのファイルをカレントディレクトリ内で探し、sourceフォルダにコピーしています。
compileのtarget要素では、javac要素で、sourceフォルダ内のjavaソースをコンパイルし、targetフォルダに出力ています。
includeAntRuntime属性は必ずfalseにする必要があるっぽいです。
最後に、execのtarget要素では、java要素で指定のclassを実行します。
使用時は、classname属性を実行するclass名に変更してください。
また、ウィンドウをもつプログラムの場合、別プロセスで実行したいので、spawn属性、fork属性をtrueに設定します。(コマンドラインベースの場合は指定不要)
また、各target要素には、depends属性を設定しており、project要素のdefault属性にexecを指定しているので、さかのぼって
init => compile => exec
の順に実行されます。
実行例
適当に、ウィンドウをもつjavaプログラムを作成します。
//AntSample.java import javax.swing.*; public class AntSample { public static void main(String args[]) { JFrame frame = new JFrame("ant_sample"); //サイズを指定 frame.setSize(800, 600); //×ボタンで終了を指定 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //ウィンドウを可視化 frame.setVisible(true); } }
build.xmlと同じディレクトリに配置します。
. AntSample.java build.xml
コマンドプロンプトを開き、build.xmlがあるディレクトリに移動。ant
を実行。
cd C:\antSample ant Buildfile: C:\antSample\build.xml init: [mkdir] Created dir: C:\antSample\source [mkdir] Created dir: C:\antSample\target [copy] Copying 1 file to C:\antSample\source compile: [javac] Compiling 1 source file to C:\antSample\target exec: BUILD SUCCESSFUL Total time: 1 second
すると、sourceフォルダ、targetフォルダが作成され、JFrameのウィンドウが表示される。
コンパイルから実行まで一連をantコマンドひとつでできるので便利。
実行後のフォルダ構成は次の通り。
. │ AntSample.java │ build.xml │ ├─source │ AntSample.java │ └─target AntSample.class
ant、もっといろいろできるみたいなので、もうちょっと勉強したいなー。
参考
7. 基本的なタスク | TECHSCORE(テックスコア)
現場に活かすJakarta Project(2):AntでJavaのビルドを簡単にする - @IT
【いまさらlinux】 cutとsedで、インストール済みパッケージ名一覧を作成する(centOS)
久しぶりの更新。←毎回
cutコマンドとsedコマンドを覚えたので使ってみた。
丁度、yum list installedで出力されるインストール済みパッケージ一覧のうち、パッケージ名のみを抽出するコマンドを書いたので、覚え書き。
yum list installed | cut -f1 -d' ' | sed -e '/^$/d'
(もしかして、もっと簡単な方法ある・・・?)
パイプばっかりであまり美しくないけどとりあえず。
流れとしては、
- yum list installed で、インストール済みパッケージ一覧を表示
- cutコマンドでスペース区切り(-d' ')の1フィールド目を取り出す(-f1)。
- 空行が残るので、sedコマンドで空行を削除(-e '/^$/d')。
抽出結果をyum infoに渡してインストール済みパッケージの調査とかに使いました。
cutとsed、便利なのでこれから使って行こうっと。
【Word Tips】段落の左側に表示される中点の消し方に物申す
今日から先輩社員として頑張ります。momoiro_tjです。なんだかんだ1年間仕事つづけるとある程度なれるものですね。慣れって怖い。
前に一度記事に上げましたが、あれ以来メモやらなんやらをいろいろとWordでとっています。
構造的に文章書けるし、レイアウトもいろいろ触れるし、なにより仕事でつかえる。
ただ、評判が両極端であるだけあって、やはり使いにくかったりする面も多々あります。
(例えば、スタイル変更しても反映されない場合が合ったり、変なタイミングで変更されちゃったり・・・)
その中で、段落の編集記号になっている中点が邪魔っていうのに焦点を置いてみます。
段落の編集記号
段落の編集記号っていうのは、次のようなものです。
普通に使う分には現れにくいです。(アウトラインを使わなければ標準スタイルが適用されるため)
ただし、アウトライン機能を使い、レベルを設定するとこの段落記号が現れる場合があります。
デフォルト(normal.dat)では標準以外のスタイルを使用すると大体付きますね。
これは、印刷には反映されません。
L字矢印の改行マークと同じで、ただの編集記号で気にしなくてもいいものです。
ただ、編集記号とはいえ見栄えに影響するので、見えなくしたいニーズはあるようで、webで消し方を検索すると質問や解説が結構出てきます。
この編集記号は2通りの消し方があります。一つは段落としての機能を一部無効にする方法。もう一つは編集記号を非表示にする方法です。
段落編集記号の消し方 その1 ※非推奨
webによく上がっている段落記号の消し方はこちらの方法です。
- 段落リボンの右下の三角より、段落の設定ダイアログを開きます。(スタイルの段落設定からでも可)
- ダイアログの「改ページと改行」タブを開く
チェックボックスのチェックをすべて外す。
「OK」で確定する。
以上の手順で消えると思います。
しかし、この方法では段落の機能を一部無効にしてしまいます。
例えば、「次の段落と分離しない」のチェックを入れておくと、連続して一つのページに入れておきたい段落の間で改ページしないように設定できます。
また、「段落前で改ページする」のチェックを入れると、その段落の前で必ず改ページをするようにできます。段落・スタイルによりページやセクションを区切る場合などに便利です。
とにかく、この記号を消したい!といった場合は、この方法で問題ありません。
しかし、紙に出力したかったり、細かくレイアウトしたい場合はこういった設定は必要不可欠です。
なので、次の紹介する方法で"一時的に"編集記号を無効にする方法をお勧めします。
段落編集記号の消し方 その2 ※推奨
こちらの方法は先ほどのやり方と違ってとても簡単です。
- 段落リボンの「編集記号の表示/非表示」をオフ(非表示)に設定します。
(ショートカット : Ctrl + Shift + 9)
これだけです。
ただし!改行やタブ、空白などのその他の編集記号もすべて消えてしまいます。
一時的にレイアウトを確認する場合など、この方法を使用するとよいです。
しかも、改行や、タブなどの編集記号も一時的に消えるため、レイアウトのチェックには最適です。
また、1の方法よりも簡単で、表示・非表示ができる、段落の設定も細かくできるなど、メリットはかなり多いと思います。
というか、これが正しい方法なんじゃないか?と思います。
ソフトは上手に使いましょう。使い方も知らないまま批判するのはいかがでしょうか!
是非、wordも愛してあげてください☆
【メモ】いち早くwebサーバの稼働を確認したい!
お久しぶりです。最近、でんぱ組.incにハマり始めて、とりあえずレンタルショップでCD借りてきました。
先日、ローカルネットワークでwebサーバたてようと思って、躓いたところのメモです。webサーバの設定とか以前のところです。
ちなみに、環境はWindows7にインストールしたVMWareにFedoraをNAT接続で配置してます。
ホストOSであるWindows7からゲストOSのFedoraにたてたWebサーバのサンプルページが表示するだけです。webサーバの設定は全く触りません。
httpdのインストールと起動
まずはwebサーバのhttpdをインストールして起動します。 インストールはyumコマンドで行います。
(sudo) yum -y install httpd
インストールが終わったら、webサーバを起動します。
(sudo) systemctl start httpd.service もしくは、(sudo) service httpd start
稼働はsystemctl status httpd.service
または、systemctl is-active httpd.service
、service httpd status
のどれかでActiveの状態がactiveで確認できます。
また、任意ですが起動時に自動起動するよう設定する場合は次の通りです。
(sudo) systemctl enable httpd.service または、(sudo) chkconfig httpd on
ひとまず、これでwebサーバの導入は完了ということにします。外部に公開したり、アプリケーションの設定などする場合は、/etc/httpd/conf/httpd.config
を編集し、サーバの詳細設定を行ってください。
現状では、ホストOSからブラウザにゲストOSのIPアドレスを入力し、テストページを表示しようとしても接続できません。
ping接続確認
まずは、ネットワークがちゃんとつながっているかを確認します。基本のping。
ping -c 5 192.168.XXX.XXX
ホストOSからとゲストOSからの両方を確認します。VMWareであれば基本的につながっているとは思いますが一応。。。
firewalldでhttpの許可
ここが肝です。fedoraを起動すると自動でfirewalld、もしくはiptablesが上がっています。いわゆるファイアウォールですね。ここでhttp通信ができないようになっている可能性があります。
私の環境の場合iptablesではなく、firewalldが動いてたので、今回はfirewalldでのhttpの許可を残します。
まずは、今使っているネットワークが何なのかをifconfig
で調べて、firewalldのどのゾーンに入っているのかを調べます。
下の例ではeth0のゾーンを調べてます。
firewall-cmd --list-all-zone | grep eth0 -1
eth0の記述がある前後1行ずつを取り出してます。 結果はこんな感じになると思われます。
public
interface: eth0
service: mdns dhcpv6-client ssh
eth0はpublicのゾーンに入っており、serviceにhttpが入っていないので、http通信は拒否されるよう設定されています。
なので、次のコマンドでpublicゾーンにhttp通信を許可してやります。
firewall-cmd --add-service=http --zone=public
httpが許可れされますので、publicゾーンのサービスを調べてやるとhttpが追加されていると思います。
ちなみに、デスクトップを入れてる場合、そちらからGUI環境で簡単に設定することができます☆
もしかしたら、これで再度ホストOSブラウザから表示させると表示されるかもしれません。表示されたらとりあえずオッケーですね。
SELinuxの無効化
それでも表示されない場合、SELinuxが悪さしてる可能性があるので、
(sudo) setenforce 0
でSELinuxを一時的に無効にしてやります。
とりあえず、これで私の環境ではサンプルページの確認できました。
ということで、メモ。