systemctl enable コマンドで Failed to execute operation: Invalid argument が出た
環境
CentOS 7.3
現象
# systemctl enable サービス名 Failed to execute operation: Invalid argument
原因
systemctl enable
コマンドで /etc/systemd/system/multi-user.target.wants/サービス名.service
にシンボリックリンクが張られるが、間違えてファイルの実体をコピーしてしまっていた。
対処
/etc/systemd/system/multi-user.target.wants/サービス名.service
を削除してあらためて systemctl enable
すればよい。
もちろん、このファイルを編集してしまっている場合は、元ファイルに適用してから操作する。
Rails アプリの wercker docker 対応で PostgreSQL の対応
Wercker からマイグレーションせよというメールが来たので対応してみた - mallowlabsの備忘録 を参考に wercker のマイグレーションを実施した。
こちらの記事では MongoDB の例だったので、PostgreSQL の場合はどうするのかと調べた。
結論としては
box: ruby:2.3 services: - id: postgres env: POSTGRES_PASSWORD: ourlittlesecret POSTGRES_USER: myuser build: steps: - bundle-install - rails-database-yml: service: postgresql-docker - script: name: echo ruby information code: | echo "ruby version $(ruby --version) running" echo "from location $(which ruby)" echo -p "gem list: $(gem list)" - script: name: db:migrate code: RAILS_ENV=test bundle exec rake db:migrate - script: name: rspec code: RAILS_ENV=test bundle exec rake spec deploy: steps: - heroku-deploy: key: $HEROKU_KEY user: $HEROKU_USER app-name: $HEROKU_APP_NAME
のような感じで。
ポイントは
services: - id: postgres
のように PostgreSQL のコンテナを指定し、rails-database-yml で postgresql-docker を指定する。
- rails-database-yml: service: postgresql-docker
すると http://devcenter.wercker.com/docs/services/postgresql に記載されている環境変数を使う database.yml を吐いて、正常に接続できるようになる。
rails-database-yml のタスクは
step-rails-database-yml/run.sh at master · wercker/step-rails-database-yml · GitHub
postgresql-docker を指定することに気付かずにハマった。
Mac OS X 環境でコマンドラインで Exif から Orientation を消す
画像ファイルで Exif はあるけど Orientation が無い、という特殊なテストデータが必要になったので。
環境
Homebrew 0.9.5
exiftool のインストール
$ brew install exiftool
Orientaiton を消す
$ exiftool -Orientation= XXX.jpg
Redmine で Github のように絵文字を入力できるプラグインを作った
チケットの内容は簡潔に書くのがいいと思うが、簡潔に書きすぎると冷たい印象になったりしてよくない。
一方、同じような issue 管理機能でも Github では ":"(コロン) で囲った一定の文字列で絵文字が手早く書けるので、簡潔に内容を書きながら、ちょっとした感情を含めることができて冷たい感じになりにくい。
Redmine でも同じことがしたいのでプラグインを作ってみた。
環境
Redmine 3.0 以降
インストール
1. 以下のようにプラグインをインストールする。
$ cd $RAILS_ROOT/plugins $ git clone https://github.com/suer/redmine_emoji.git $ cd $RAILS_ROOT $ bundle install
2. Redmine を再起動
機能
Wiki 記法が効くところならどこでも :xxxx: 形式の Github の絵文字を認識し、画像と差し替える。
Emoji cheat sheet for GitHub, Basecamp and other services
似たプラグイン
当然同じようなことを考えている人はいるようで、同じ目的のプラグインは既にある。
https://github.com/tmy/redmine_gemoji
こちらは Textile のみの対応となっており、Markdown で使えないのと、サジェストする機能がなかったので新たに作った。
サブディレクトリ運用の複数の Redmine で別の Redmine にアクセスすると勝手にログアウトするのを防ぐ
確認したバージョン
- Redmine 2.6.9.stable
問題
Redmine は _redmine_session という Cookie でログイン状態が管理されていてる。
Redmine では、何もしないとパスが "/" で登録されるので、実際に異なるパスの Cookie データでも、同じとみなされてしまう。
なので、別の Redmine にアクセスすると、同じドメイン、パスの同じ Cookie キーなのに、値が違うので、ログインのしなおしになる。
設定方針
config/application.rb の以下の部分にパスを指定すればいいが、このファイルは Git の管理下なのであまり修正しないほうがいい。
config.session_store :cookie_store, :key => '_redmine_session'
Redmine では、 config/application.rb に追記修正したい場合に、config/additional_environment.rb というファイルを用意している。 このファイルに書かれたコードは、Rails::Application のインスタンス化で eval されるので、 config/application.rb に書いたのと同じように動く。
解決
ということで、それぞれの Redmine の config/additional_environment.rb に以下のように書けばうまく動く。
config.session_store :cookie_store, :key => '_redmine_session', :path => '/XXXX'
XXXX はそれぞれの Redmine で異なる値を入れればよいが、その Redmine が配備されているサブディレクトリパスとかにすればいいと思う。
タブ文字で grep する
test(タブ文字) みたいなのを grep したい場合。
ターミナル
$ grep "test(タブ文字)" /path/to/file
のように入力したいが、普通に入力するとシェルがタブ文字を奪う。 bash, zsh の場合は ctrl-v を入力してからタブを打つと入力される。
ただし、これはメモなどからコピペするときに苦労する。
[:space:] の利用
空白文字もマッチしてしまうけど、それでもよければ [[:space:]]
でタブ文字もマッチする。
これならメモなどからコピペできる。
$ grep "test[[:space:]]" /path/to/file
$'\t'
$ grep "test$'\t'" /path/to/file
はうまくマッチしなかった。
$ grep test$'\t' /path/to/file
であればマッチする。
どんなふうに展開されるか追っていけば使えるかもしれないが、よくわかっていない。