Railsのgem carriewaveが生成するファイルのパーミッション設定

Railsのgem carriewaveが生成するファイルのパーミッション設定

capistranoでデプロイ時にとあるディレクトリの削除ができずにエラーになるという問題に直面しました。

capistranoではデプロイ時に古い世代のバージョンを削除するのですが、ファイル権限が755のものが存在するのが原因で、apacheユーザのumaskが002になっているにもかかわらず問題が生じていました。

carriewaveでファイル生成しているところが怪しいと思いソースコードを見たところ、configにファイルパーミッション設定をしているところを見つけました。

initializerで以下のように設定を上書きすることにより、無事775でファイル生成されるようになり、問題は解消しました

config/initializers/carrierwave.rb

1 CarrierWave::SanitizedFile.sanitize_regexp = /[^[:word:].-+]/
2
3 CarrierWave.configure do |config|
4 if Rails.env.development? or Rails.env.test?
5 config.storage = :file
6 else
7 config.directory_permissions = 0775
8 config.storage = :fog

7行目が該当の修正箇所です。
storageがfogになっているのになぜローカルにディレクトリを作っているのか、そのあたりの原因は調べきれていませんが、とりあえず問題は解決しました。

2014/11/12 追記
根本的な原因は、carriewaveのキャッシュディレクトリの問題でした。

lib/carrierwave/uploader/configuration.rb

161 config.cache_storage = :file
162 config.fog_attributes = {}
163 config.fog_credentials = {}
164 config.fog_public = true
165 config.fog_authenticated_url_expiration = 600
166 config.fog_use_ssl_for_aws = true
167 config.store_dir = ‘uploads’
168 config.cache_dir = ‘uploads/tmp’

キャッシュストレージをS3にすることもできるので、パフォーマンスなど問題なければそれで解決も可能です。

TAG

  • このエントリーをはてなブックマークに追加
金子 将範
エンジニア 金子 将範 rubyist

新しいことや難しい課題に挑戦することにやりがいを感じ、安定やぬるい事は退屈だと感じます。 考えるより先に手が動く、肉体派エンジニアで座右の銘は諸行無常。 大事なのは感性、プログラミングにおいても感覚で理解し、感覚で書きます。