Ruby
ActiveAdminを導入するときの定型パターンなのに毎回忘れるのでメモ。ていうか、これいい加減ActiveAdmin側で何かしてくれないかな(←Pull request送れや)
- app/assets/stylesheets/admin.css を app/assets/stylesheets/admin/admin.css 等のようにして下層ディレクトリへ隔離 (app/assets/javascripts も同様)
- app/assets/stylesheets/application.css 内の
require_tree .
をrequire_directory .
に変更- これにより app/assets/stylesheets のサブディレクトリを読み込まなくなるので app/assets/stylesheets/admin が隔離されるが、副作用として app/assets/stylesheets/hoehoe-func のような機能ごとのサブディレクトリ運用もできなくなるので、必要ならば適宜
require_directory hoehoe-func
を追記する必要がある
- これにより app/assets/stylesheets のサブディレクトリを読み込まなくなるので app/assets/stylesheets/admin が隔離されるが、副作用として app/assets/stylesheets/hoehoe-func のような機能ごとのサブディレクトリ運用もできなくなるので、必要ならば適宜
config/initializer/active_admin.rb の
== Register Stylesheets & Javascripts
の項に以下を追記config.clear_stylesheets! config.register_stylesheet 'admin/active_admin.css' config.clear_javascripts! config.register_javascript 'admin/active_admin.js'
config.clear_stylesheets!
... 念のため、他の箇所で読み込まれたスタイルシート情報を破棄config.register_stylesheet 'admin/active_admin.css'
... app/assets/stylesheets/admin/active_admin.css を読み込むよう設定- (javascripts 側も同様の処理)
ググってみると、大抵以下のようなコードが多数見つかる。
ruby -e 'p [*1..9, *"a".."z", *"A".."Z"].sample(8).join'
これ、
ruby -e 'p [*"!".."z"].sample(8).join'
でいいんぢゃねぇです? 文字コード的に半角スペース, "!" , …数字…大文字アルファベット…小文字アルファベット、と続くので。まあパスワードに半角スペース入れると入力が厄介なことになりそうだからその次の "!" から始めるとして。
あ、でも " とか ' とか ` あたりもパスワードに含めると扱いがアレ気になりそうだから、
ruby -e 'p [*"!".."z"].reject {|c| %w"\" '"'"' \`".include? c }.sample(8).join'
くらいで、どうですかね?
TestException#test_machine_stackoverflow_by_define_method でググって見つけた issue の修正内容を適用してみたら改善できたのでメモ。
ruby 2.1.7 で見つかって ruby 2.2.0 で対策されていたので、今出ているruby 2.1.7パッケージには反映されていない、と言うことなんだろう、多分。
問題のissueは Bug #9739 。以下は修正個所の転記(何かの拍子に原典が消えてしまうと困るので)。
diff --git a/configure.in b/configure.in
index f52e0ba..078f9ba 100644
--- a/configure.in
+++ b/configure.in
@@ -2782,7 +2782,7 @@ if test "$with_dln_a_out" != yes; then
rb_cv_dlopen=yes],
[cygwin*|mingw*], [
: ${LDSHARED='$(CC) -shared $(if $(filter-out -g -g0,$(debugflags)),,-s)'}
- XLDFLAGS="$XLDFLAGS -Wl,--stack,0x00200000,--enable-auto-import"
+ XLDFLAGS="$XLDFLAGS -Wl,--stack,0x01200000,--enable-auto-import"
DLDFLAGS="${DLDFLAGS} -Wl,--enable-auto-image-base,--enable-auto-import"
: ${LIBPATHENV=""}
rb_cv_dlopen=yes],
修正後、念のため make clean ; ./configure ; make までやったら make check でエラーが無くなった。
active_support/core_ext/module/attribute_accessors.rb をrequire。ちぃ覚えた。
Moduleを拡張しているのでrequireすればクラスに導入されますね。効果としてはクラスとインスタンス、両方のアクセサとして共通に使えるアクセサが定義できるようです。
ActiveRecord::Base.loggerを流用しようとして存在に気づいた。
gem 'activerecord'
した環境で試してみると、以下のような感じ。
$ bundle exec ruby -e ' require "active_support/core_ext/module/attribute_accessors" require "logger" class TestClassA mattr_accessor :logger end TestClassA.logger = Logger.new( STDERR ) TestClassA.logger.info( "Message from class method." ) TestClassA.new.logger.info( "Message from instance method." ) puts "Class method logger; #{TestClassA.logger}" puts "Instance method logger; #{TestClassA.new.logger}" ' I, [2015-05-15T12:04:17.514556 #30503] INFO -- : Message from class method. I, [2015-05-15T12:04:17.514671 #30503] INFO -- : Message from instance method. Class method logger; #<Logger:0x007f12f269f198> Instance method logger; #<Logger:0x007f12f269f198>
確かにクラスメソッドでアクセスしてもインスタンスメソッドでアクセスしても、同じオブジェクトが入ってる。
CentOSでRubyをソースコンパイルするときに、いつも事前インストールしているライブラリ群です。個人的にXMLを扱う開発が多いので、XML関連のライブラリも一緒に入れています。
このままコピペして yum install
すればまとめて導入できるはず。
openssl openssl-devel readline readline-devel ncurses ncurses-devel gdbm gdbm-devel libffi libffi-devel zlib zlib-devel bison mysql mysql-devel mysql-server sqlite-devel libxml2 libxml2-devel libxslt libxslt-devel libyaml libyaml-devel
[2016.06.04 追記]
Ruby 2.2.1ビルド時にlibffi-develが無くて怒られたので追記しました。
さらにCentOS 7用に mysql を mariadb に変更。
openssl openssl-devel readline readline-devel ncurses ncurses-devel gdbm gdbm-devel libffi libffi-devel zlib zlib-devel bison mariadb mariadb-devel mariadb-server sqlite-devel libxml2 libxml2-devel libxslt libxslt-devel libyaml libyaml-devel