amazonSQSを利用せずにopen-wripeを動かす

Tetsuro Aoki 250views 更新:2014年8月5日

open-wripeはamazonSQSを利用して非同期化処理を行っています。そのためamazonSQSの情報を設定ファイルに記述しないとメモの保存時などにエラーが出てしまいます。そこで、amazonSQSへのアクセスを回避するようにソースコードを修正してみました。

https://github.com/masuidrive/open-wripe/pull/5/files

基本的に上記URL通りに修正しましたが、それだけでは回避しきれないようなのでさらに修正しています。

vim Gemfile
---------------------------------------------------------------------------------
...(略)
gem 'settingslogic'
#末尾に追記
---------------------------------------------------------------------------------
vim app/controllers/application_controller.rb
---------------------------------------------------------------------------------
...(略)
#around_filter :active_record_queue_filter
around_filter :active_record_queue_filter if !Settings.flags.disable_ar_async
...(略)
---------------------------------------------------------------------------------
vim app/models/settings.rb
---------------------------------------------------------------------------------
class Settings < Settingslogic
  source "#{Rails.root}/config/application.yml" 
  namespace Rails.env
end
---------------------------------------------------------------------------------
vim config/application.yml
---------------------------------------------------------------------------------
defaults: &defaults
  flags:
    disable_ar_async: on

development:
  <<: *defaults

test:
  <<: *defaults

production:
  <<: *defaults
---------------------------------------------------------------------------------
vim lib/ar_async.rb
---------------------------------------------------------------------------------
...(略)
#asyncメソッドを書き換え
  def async(methodname, args=[])
    message = async_message_dump(methodname, args)
    if !Settings.flags.disable_ar_async
      if ActiveRecordAsync.config['inline']
        ActiveRecordAsync.async_message_run(message)
      else
        if ActiveRecordAsync.async_batch_messages.nil?
          ActiveRecordAsync.sqs.send_message(message)
        else
          ActiveRecordAsync.async_batch_messages << message
        end
      end
    else
      message = Marshal.load(Base64.decode64(message))
      message[:result] = message[:obj].send message[:method], *message[:args]
      message
    end
  end
...(略)
---------------------------------------------------------------------------------

ログイン / 新規登録してコメントする

このソースコードをストックして後で利用したり、作業に利用したソースコードをまとめることができます。

こちらもお役に立つかもしれません