質問編集履歴

3 redis タグ追加

abab7200

abab7200 score 118

2017/11/12 16:02  投稿

RailsでRedisを利用した際にSQLエラーが発生する
rails4でブログを作成しております。
その際にviewのランキングを表示するページを作成しようと思い、
参考サイトを元にredisを利用して対応しようと考えました。
しかし、DBに認識できない文字列が登録されているというエラーが発生しました。
どなたか解決策をご教授頂ければと存じます。
※DBはPostgreSQLになります
redisは起動しており、コード変更後サーバも再起動しております。
[参考サイト](http://seishin55.hatenablog.com/entry/2016/05/02/214513)
エラー
```ruby
ActiveRecord::StatementInvalid in ArticlesController#show
PG::UndefinedColumn: ERROR: column
articles.published_at does not exist LINE 1: ...articles".* FROM "articles" WHERE (1=1) ORDER BY "articles"... ^ :
SELECT "articles".* FROM "articles" WHERE (1=1) ORDER BY "articles"."published_at" DESC, "articles"."updated_at" DESC LIMIT 5
```
controllerのコード
```ruby
class ArticlesController < ApplicationController
before_action :set_ranking_data
def show
@article = Article.find(params[:id])
REDIS.zincrby "articles/#{Date.today.to_s}", 1, @article.id
end
private
def set_ranking_data
ids = REDIS.zrevrangebyscore "articles/#{Date.yesterday.to_s}", "+inf", 0, limit: [0, 5]
@ranking_articles = ids.map{ |id| Article.find(id) }
if @ranking_articles.count < 5
adding_articles = Article.order(published_at: :DESC, updated_at: :DESC).where.not(id: ids).limit(5 - @ranking_articles.count)
@ranking_articles.concat(adding_articles)
end
end
end
```
console上でset_ranking_dataメソッドでidsを入力するとそもそも値がnilになっております。
```ruby
>>ids = REDIS.zrevrangebyscore "articles/#{Date.yesterday.to_s}", "+inf", 0, limit: [0, 5]
=> []
```
  • Ruby

    17977 questions

    Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

  • Ruby on Rails 4

    2670 questions

    Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

  • サーバ

    1395 questions

    サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

  • Redis

    216 questions

    Redisは、オープンソースのkey-valueデータストアで、NoSQLに分類されます。すべてのデータをメモリ上に保存するため、処理が極めて高速です。

2 カテゴリーをredisからサーバ カテゴリーへ変更

abab7200

abab7200 score 118

2017/11/07 08:38  投稿

RailsでRedisを利用した際にSQLエラーが発生する
rails4でブログを作成しております。
その際にviewのランキングを表示するページを作成しようと思い、
参考サイトを元にredisを利用して対応しようと考えました。
しかし、DBに認識できない文字列が登録されているというエラーが発生しました。
どなたか解決策をご教授頂ければと存じます。
※DBはPostgreSQLになります
redisは起動しており、コード変更後サーバも再起動しております。
[参考サイト](http://seishin55.hatenablog.com/entry/2016/05/02/214513)
エラー
```ruby
ActiveRecord::StatementInvalid in ArticlesController#show
PG::UndefinedColumn: ERROR: column
articles.published_at does not exist LINE 1: ...articles".* FROM "articles" WHERE (1=1) ORDER BY "articles"... ^ :
SELECT "articles".* FROM "articles" WHERE (1=1) ORDER BY "articles"."published_at" DESC, "articles"."updated_at" DESC LIMIT 5
```
controllerのコード
```ruby
class ArticlesController < ApplicationController
before_action :set_ranking_data
def show
@article = Article.find(params[:id])
REDIS.zincrby "articles/#{Date.today.to_s}", 1, @article.id
end
private
def set_ranking_data
ids = REDIS.zrevrangebyscore "articles/#{Date.yesterday.to_s}", "+inf", 0, limit: [0, 5]
@ranking_articles = ids.map{ |id| Article.find(id) }
if @ranking_articles.count < 5
adding_articles = Article.order(published_at: :DESC, updated_at: :DESC).where.not(id: ids).limit(5 - @ranking_articles.count)
@ranking_articles.concat(adding_articles)
end
end
end
```
console上でset_ranking_dataメソッドでidsを入力するとそもそも値がnilになっております。
```ruby
>>ids = REDIS.zrevrangebyscore "articles/#{Date.yesterday.to_s}", "+inf", 0, limit: [0, 5]
=> []
```
  • Ruby on Rails 4

    2670 questions

    Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

  • Redis

    216 questions

    Redisは、オープンソースのkey-valueデータストアで、NoSQLに分類されます。すべてのデータをメモリ上に保存するため、処理が極めて高速です。

  • Ruby

    17977 questions

    Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

  • サーバ

    1395 questions

    サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

1 タイトル変更

abab7200

abab7200 score 118

2017/11/06 15:58  投稿

RailsでRedisを利用した際にエラーが発生する
RailsでRedisを利用した際にSQLエラーが発生する
rails4でブログを作成しております。
その際にviewのランキングを表示するページを作成しようと思い、
参考サイトを元にredisを利用して対応しようと考えました。
しかし、DBに認識できない文字列が登録されているというエラーが発生しました。
どなたか解決策をご教授頂ければと存じます。
※DBはPostgreSQLになります
redisは起動しており、コード変更後サーバも再起動しております。
[参考サイト](http://seishin55.hatenablog.com/entry/2016/05/02/214513)
エラー
```ruby
ActiveRecord::StatementInvalid in ArticlesController#show
PG::UndefinedColumn: ERROR: column
articles.published_at does not exist LINE 1: ...articles".* FROM "articles" WHERE (1=1) ORDER BY "articles"... ^ :
SELECT "articles".* FROM "articles" WHERE (1=1) ORDER BY "articles"."published_at" DESC, "articles"."updated_at" DESC LIMIT 5
```
controllerのコード
```ruby
class ArticlesController < ApplicationController
before_action :set_ranking_data
def show
@article = Article.find(params[:id])
REDIS.zincrby "articles/#{Date.today.to_s}", 1, @article.id
end
private
def set_ranking_data
ids = REDIS.zrevrangebyscore "articles/#{Date.yesterday.to_s}", "+inf", 0, limit: [0, 5]
@ranking_articles = ids.map{ |id| Article.find(id) }
if @ranking_articles.count < 5
adding_articles = Article.order(published_at: :DESC, updated_at: :DESC).where.not(id: ids).limit(5 - @ranking_articles.count)
@ranking_articles.concat(adding_articles)
end
end
end
```
console上でset_ranking_dataメソッドでidsを入力するとそもそも値がnilになっております。
```ruby
>>ids = REDIS.zrevrangebyscore "articles/#{Date.yesterday.to_s}", "+inf", 0, limit: [0, 5]
=> []
```
  • Redis

    216 questions

    Redisは、オープンソースのkey-valueデータストアで、NoSQLに分類されます。すべてのデータをメモリ上に保存するため、処理が極めて高速です。

  • Ruby on Rails 4

    2670 questions

    Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る