ラベル rails の投稿を表示しています。 すべての投稿を表示
ラベル rails の投稿を表示しています。 すべての投稿を表示

2022年8月15日月曜日

Beanstalkをamazon linux2に上げたら、cronでrakeコマンドが叩けなくなった件

 今まで、Amazon linuxベースで、Beanstalkを展開していたら、下記のようにシェルスクリプトを書いておけばrailsのタスクを実行できていましたよね。

#!/usr/bin/env bash
set -xe
EB_SCRIPT_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k script_dir)
EB_SUPPORT_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k support_dir)
EB_DEPLOY_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k app_deploy_dir)
. $EB_SUPPORT_DIR/envvars
. $EB_SCRIPT_DIR/use-app-ruby.sh

cd /var/app/current
bundle exec rake ***:*****

ところがAmazon linux2になったら、/opt/elasticbeanstalk/bin/get-configの情報が変わって、script_dirが無いよ!というエラーがでるようになりました。

環境変数はAWSが公表している通り、下記ページを参考にすれば読み込むことができて、
下のように環境変数読み込み部分を削除してしまえば、サーバにログインしてから下記ファイルを直接叩いたら、動くことが確認できました。
#!/usr/bin/env bash
cd /var/app/current
bundle exec rake ***:*****
しかしながら、cronで叩くと、エラーがでて動きません。
/usr/bin/env: ruby: No such file or directory

どうしたものかと試行錯誤の結果、
crontabファイルのPATH指定部分に、rubyのディレクトリを追加
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/opt/elasticbeanstalk/.rbenv/shims
かつ、シェルスクリプトで上記AWS公表の環境変数の更新をかけたら動きました。
#!/usr/bin/env bash
source /etc/profile.d/sh.local
cd /var/app/current
bundle exec rake ***:*****

なんかBeanstalk Amazon linux2について、CronとかRakeタスクの情報がぜんぜんないのですが、みなさんあたりまえに対応しているのか、そもそもサーバで叩かないのがセオリーなのか、どうなのでしょう・・・・・?



2016年1月15日金曜日

EC2にRuby on Rails環境を作る

いろいろな記事を参考にして、自分の場合はこれでできたメモ。
まっさらのEC2を立てる。

まずアップデート。
#sudo yum -y update
#sudo yum -y install git gcc-c++ glibc-headers openssl-devel readline libyaml-devel readline-devel zlib zlib-devel libffi-devel libxml2 libxslt libxml2-devel libxslt-devel sqlite-devel ruby-devel
railsをインストール
#gem install rails
Gemfileを開いて、therubyracerの行のコメントを外す
#vi Gemfile
また、適当なソースにrequireを追加
require 'v8'
そのうえで、
#gem install libv8#bundle install
バンドルができたら、
#rails s
動けばOK。

rbenvでrailsのバージョン管理

ruby-buildインストール
#git clone git://github.com/sstephenson/ruby-build.git
#cd ruby-build
#sudo ./install.sh

rbenvインストール
#git clone git://github.com/sstephenson/rbenv.git ~/.rbenv
#echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
#echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
#source ~/.bashrc
#exec $SHELL -l
#rbenv install -l
で一覧がでたら成功かな
#rbenv install 2.2.3
#rbenv rehash
#rbenv global 2.2.3







2015年10月29日木曜日

Heroku + Resque + Redis Cloud とても苦労した

何日か唸ってようやく動きました。

なんかresqueのバージョンだとによっても設定が違うみたいなので、1例としてみてください。
Herokuに、Redis Cloudを使っています。
最終的には、Procfileの赤字部分の書き方で詰まっていたようでした。

Gemfile
gem 'rails', '4.2.3'
gem "resque"
gem 'redis'

config/environments/production.rb
config.x.resque.redis = ENV["REDISCLOUD_URL"]

Procfile
resque: env TERM_CHILD=1 QUEUE=* bundle exec rake environment resque:work

config/initializers/redis.rb
if ENV["REDISCLOUD_URL"]
  $redis = Resque.redis = Redis.new(:url => ENV["REDISCLOUD_URL"])
end

config/initializers/load_resque.rb
require 'resque'
Resque.redis = Rails.configuration.x.resque.redis

キューに放り込むところ
Resque.enqueue(Test:: Updatetables, article.id)

実行ファイル
module Test
  class Updatetables
    @queue = :default
    def self.perform(id)
      article = Article.find_by(id: id)
      article.save
    end
  end
end

2014年6月16日月曜日

Gem better_errorsが動かなくなった

railsでbetter_errorsがいつの間にか動かなくなってて、エラーメッセージしか表示されないようになりました。
あれー、おかしいなぁ、おかしいなぁ、怖いなぁー
と思ってたら、アクセス先が
http://localhost:ポート/
じゃなくてローカルIP
http://192.168.10.0:ポート/
みたいなURLでアクセスしてしまってました。

better_errorsはIPだと駄目らしいのですね・・・。

2014年3月16日日曜日

Rails でIPを取得するとき

RailsでIPを取得するとき、古い記事だと
    request.env["HTTP_X_FORWARDED_FOR"] || request.remote_ip
これで取れると書いてあります。

しかし、HTTP_X_FORWARDED_FORは、カンマ区切りで複数のIPが帰ってきてしまうので、使い勝手よくありません。
request.remote_ipも、いくつかのIP取得のメソッドの集合のようで、HTTP_X_FORWARDED_FORを含んでおり、カンマ区切りで帰ってくる可能性大。

そういうわけで、こっちを使うほうがいいかも。
    request.env["HTTP_X_FORWARDED_FOR"].split(",")[0] || request.remote_ip

メモ。