manatee-itの備忘ログ

プログラム初心者のブログ。ruby on railsでWebサービスを作成中。(仕事が忙しくなかななか進まず) つまずいた所をなんでも記録。 環境:Ruby2.1 + Rails4.1.1 + Passenger + CentOS6.4(Apache + sqlite/MySQL)

hidden_fieldでログインしているユーザのIDを自動で追加

入力フォームで「タイトル」を入力してもらい、その際にユーザIDを自動でデータベースのレコードに追加したい。

Viewにhidden_fieldを記載。

# vim app/views/programs/_form.html.erb
      :
<%= f.hidden_field :uid, :value => current_user.id %>
      :
<%= f.label :title %>

<%= f.text_field :title %>
      :

コントローラの記載でuidを許可
# vim app/controllers/programs_controller.rb
      :
params[:program].permit(:title)

params[:program].permit(:title,:uid)

ログインしたユーザが登録したタイトルのみが表示されるようになった。

「Could not find a JavaScript runtime」のエラー、therubyracerをコメントアウトして対応

# rails g scaffold programs name:string
/usr/local/lib/ruby/gems/2.1.0/gems/execjs-2.1.0/lib/execjs/runtimes.rb:51:in `autodetect': Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)
from /usr/local/lib/ruby/gems/2.1.0/gems/execjs-2.1.0/lib/execjs.rb:5:in `'
from /usr/local/lib/ruby/gems/2.1.0/gems/execjs-2.1.0/lib/execjs.rb:4:in `'
from /usr/local/lib/ruby/gems/2.1.0/gems/uglifier-2.5.0/lib/uglifier.rb:3:in `require'
from /usr/local/lib/ruby/gems/2.1.0/gems/uglifier-2.5.0/lib/uglifier.rb:3:in `'
from /usr/local/lib/ruby/gems/2.1.0/gems/bundler-1.6.2/lib/bundler/runtime.rb:76:in `require'
from /usr/local/lib/ruby/gems/2.1.0/gems/bundler-1.6.2/lib/bundler/runtime.rb:76:in `block (2 levels) in require'
from /usr/local/lib/ruby/gems/2.1.0/gems/bundler-1.6.2/lib/bundler/runtime.rb:72:in `each'
from /usr/local/lib/ruby/gems/2.1.0/gems/bundler-1.6.2/lib/bundler/runtime.rb:72:in `block in require'
from /usr/local/lib/ruby/gems/2.1.0/gems/bundler-1.6.2/lib/bundler/runtime.rb:61:in `each'
from /usr/local/lib/ruby/gems/2.1.0/gems/bundler-1.6.2/lib/bundler/runtime.rb:61:in `require'
from /usr/local/lib/ruby/gems/2.1.0/gems/bundler-1.6.2/lib/bundler.rb:132:in `require'
from /var/www/html/Tabetai/config/application.rb:7:in `'
from /usr/local/lib/ruby/gems/2.1.0/gems/spring-1.1.3/lib/spring/application.rb:82:in `require'
from /usr/local/lib/ruby/gems/2.1.0/gems/spring-1.1.3/lib/spring/application.rb:82:in `preload'
from /usr/local/lib/ruby/gems/2.1.0/gems/spring-1.1.3/lib/spring/application.rb:140:in `serve'
from /usr/local/lib/ruby/gems/2.1.0/gems/spring-1.1.3/lib/spring/application.rb:128:in `block in run'
from /usr/local/lib/ruby/gems/2.1.0/gems/spring-1.1.3/lib/spring/application.rb:122:in `loop'
from /usr/local/lib/ruby/gems/2.1.0/gems/spring-1.1.3/lib/spring/application.rb:122:in `run'
from /usr/local/lib/ruby/gems/2.1.0/gems/spring-1.1.3/lib/spring/application/boot.rb:18:in `'
from /usr/local/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /usr/local/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from -e:1:in `

'

therubyracerをコメントアウトして対応
# vim Gemfile
gem 'therubyracer', platforms: :ruby

rails環境でテーブルにカラム追加

sqliteで、ALTER TABLEを実行すればカラムは追加できますが、マイグレーションファイルを使った方法で追加。

sqlite> .schema programs
CREATE TABLE "programs" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "title" varchar(255), "created_at" datetime, "updated_at" datetime);

カラム追加のマイグレーションファイルを作成。
# rails g migration AddUidToPrograms uid:integer
invoke active_record
create db/migrate/20140605124613_add_uid_to_programs.rb

中身を確認
# cat db/migrate/20140605124613_add_uid_to_programs.rb
class AddUidToPrograms < ActiveRecord::Migration
def change
add_column :programs, :uid, :integer
end
end

# rake db:migrate
== 20140605124613 AddUidToPrograms: migrating =================================

    • add_column(:programs, :uid, :integer)

-> 0.0043s
== 20140605124613 AddUidToPrograms: migrated (0.0045s) ========================

sqlite> .schema programs
CREATE TABLE "programs" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "title" varchar(255), "created_at" datetime, "updated_at" datetime, "uid" integer);

whenever でcron設定

環境:Ruby2.1 + Rails4.1.1 + Passenger + CentOS6.4(Apache + sqlite/MySQL(予定))

classとして作成した機能を毎日定時に実行するため、wheneverを導入してcrontab を設定。

(参考URL)
なんちゃってGeek(仮): Rails4.0でcron(バッチ処理)を動かす設定

                                                                                                                    • -

実行するファイル
# vim lib/tasks/search_task.rb


config/application.rbファイルに以下を追加。
config.autoload_paths += %W(#{config.root}/lib)


実行テスト
rails runner Tasks::SearchTask.execute

# vim Gemfile
gem 'whenever', :require => false
# bundle install

# wheneverize .

# vim config/schedule.rb
set :output, 'log/cron.log'
set :environment, :production

every 1.day, :at => '8:00 am' do
runner 'Tasks::SearchTask.execute'
end


# bundle exec whenever
# bundle exec whenever --update-crontab

# crontab -l
⇒設定を/etc/crontabに移動

rails + Passenger + apacheでの本番サーバへの移行設定で大混乱

環境:Ruby2.1 + Rails4.1.1 + Passenger + CentOS6.4(Apache + sqliteMySQL(予定))


結果的にうまく動作したが、何が必要で何が必要でなかったのかが、わからなくなったので、後で再調査しないと。


# vim config/environments/production.rb
config.serve_static_assets = true

# rake environment RAILS_ENV=production

以下は不要?
# mkdir public/images/
# cp -a app/assets/images/logo.png public/images/

今度は以下のエラーがerror_logに出力されている。
stderr: [ 2014-05-25 19:00:51.4101 23379/0x007f22ebc2a5c8(Worker 1) utils.rb:68 ]: *** Exception RuntimeError in Rack application object (Missing `secret_key_base` for 'production' environment, set this value in `config/secrets.yml`) (process 23379, thread 0x007f22ebc2a5c8(Worker 1)):

シークレットキーの生成
# rake secret
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx....

apache環境変数として設定
# cat /etc/sysconfig/httpd
export SECRET_KEY_BASE="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...."


# ll remindertv/db/production.sqlite3

  • rwxrwxrwx 1 root root 7168 6月 1 22:36 2014 remindertv/db/production.sqlite3

# vim config/secrets.yml
development:
secret_key_base: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx....

test:
secret_key_base: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx....

# Do not keep production secrets in the repository,
# instead read values from the environment.
production:
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>

DBはdevelopmentとproductionで異なるため、DBを変更した場合は以下が必要。
# rake db:migrate RAILS_ENV=production
== 20140601070725 CreatePrograms: migrating ===================================

    • create_table(:programs)

-> 0.0016s
== 20140601070725 CreatePrograms: migrated (0.0018s) ==========================

# rake assets:precompile
I, [2014-06-02T21:20:56.017327 #31390] INFO -- : Writing /var/www/html/remindertv/public/assets/logo-xxxxxxxxxxxxxxxxxxxxxxxxxx.....png
I, [2014-06-02T21:20:56.025700 #31390] INFO -- : Writing /var/www/html/remindertv/public/assets/application-xxxxxxxxxxxxxxxxxxxxxxxxxx......js
I, [2014-06-02T21:20:56.103759 #31390] INFO -- : Writing /var/www/html/remindertv/public/assets/application-xxxxxxxxxxxxxxxxxxxxxxxxxx......css

開発環境のSQLiteのファイルをコピー
# cp -a development.sqlite3 production.sqlite3
# ll
合計 28

  • rw-r--r-- 1 root root 7168 6月 1 22:36 2014 development.sqlite3

drwxr-xr-x 2 root root 4096 6月 1 16:07 2014 migrate

  • rw-r--r-- 1 root root 7168 6月 1 22:36 2014 production.sqlite3
  • rw-r--r-- 1 root root 934 6月 1 16:10 2014 schema.rb
  • rw-r--r-- 1 root root 343 6月 1 16:03 2014 seeds.rb

dbディレクトリの権限を777にしてみる。
# chmod 777 db

アクセスできたが。。。他のサイトを参照させていただき、再度やり直す予定。

参考させて頂く予定のサイト
http://www.ark-web.jp/sandbox/wiki/284.html
http://d.hatena.ne.jp/zariganitosh/touch/20070108/1168246932

yahootvのパラメータ

検索結果をスクレイピングさせていただくYahoo!TVについて、検索パラメータの内容を確認しました。

検索例:キーワード「F1」、放送波「地上波、BS放送」、並べ替え「放送時間順」、エリア「神奈川」の場合。

http://tv.yahoo.co.jp/search/?q=F1&t=1%25203&oa=1&a=24

検索結果数は、放送波の選択内容にかかわらず、BS放送、CS放送、地上波の結果が表示される。

                                                                                      • -

検索キーワード:
?=(キーワード)

放送波:
t=1 BS放送 (%25201)
t=2 CS放送 (%25202)
t=3 地上波 (%25203)
※放送波を複数選択した場合はカッコ()内の値を付与する。

エリア:
a=23 東京
a=24 神奈川
a=25 群馬
a=26 茨城
a=27 千葉
a=28 栃木
a=29 埼玉

並べ替え:
oa=1 放送時間順
oa=2 「見たい」登録数順
oa=3 感想数順
oa=4 放送局順

ジャンル:
なし すべて
g=00 ニュース/報道
g=01 スポーツ
g=02 情報/ワイドショー
g=03 ドラマ
g=04 音楽
g=05 バラエティ
g=06 映画
g=07 アニメ/特撮
g=08 ドキュメンタリー/教養
g=09 劇場/公演
g=10 趣味/教育
g=11 福祉
g=15 その他

                                                                                      • -

nokogiriのエラー

環境:Ruby2.1 + Rails4.1.1 + Passenger + CentOS6.4(Apache + sqlite/MySQL)

nokogiri (1.6.2.rc2)を利用したタスク実行時にエラーが発生した。

-----------------------------------------------------------------------------------

Rakeタスク実行

# rake search:generate

rake aborted!

LoadError: cannot load such file -- nokogiri/nokogiri

/var/www/html/remindertv/lib/tasks/search.rake:8:in `block (2 levels) in <top (required)>'

LoadError: cannot load such file -- nokogiri/2.1/nokogiri

/var/www/html/remindertv/lib/tasks/search.rake:8:in `block (2 levels) in <top (required)>'

Tasks: TOP => search:generate

(See full trace by running task with --trace)

-----------------------------------------------------------------------------------

クラス実行

# rails runner Tasks::SearchTask.execute
/usr/local/lib/ruby/gems/2.1.0/gems/activesupport-4.1.1/lib/active_support/dependencies.rb:247:in `require': cannot load such file -- nokogiri/nokogiri (LoadError)
from /usr/local/lib/ruby/gems/2.1.0/gems/activesupport-4.1.1/lib/active_support/dependencies.rb:247:in `block in require'
from /usr/local/lib/ruby/gems/2.1.0/gems/activesupport-4.1.1/lib/active_support/dependencies.rb:232:in `load_dependency'
from /usr/local/lib/ruby/gems/2.1.0/gems/activesupport-4.1.1/lib/active_support/dependencies.rb:247:in `require'
from /usr/local/lib/ruby/2.1.0/nokogiri.rb:29:in `rescue in <top (required)>'
from /usr/local/lib/ruby/2.1.0/nokogiri.rb:25:in `<top (required)>'
from /usr/local/lib/ruby/gems/2.1.0/gems/activesupport-4.1.1/lib/active_support/dependencies.rb:247:in `require'
from /usr/local/lib/ruby/gems/2.1.0/gems/activesupport-4.1.1/lib/active_support/dependencies.rb:247:in `block in require'
from /usr/local/lib/ruby/gems/2.1.0/gems/activesupport-4.1.1/lib/active_support/dependencies.rb:232:in `load_dependency'
from /usr/local/lib/ruby/gems/2.1.0/gems/activesupport-4.1.1/lib/active_support/dependencies.rb:247:in `require'
from /var/www/html/remindertv/lib/tasks/search_task.rb:8:in `execute'
from /usr/local/lib/ruby/gems/2.1.0/gems/railties-4.1.1/lib/rails/commands/runner.rb:62:in `<top (required)>'
from /usr/local/lib/ruby/gems/2.1.0/gems/railties-4.1.1/lib/rails/commands/runner.rb:62:in `eval'
from /usr/local/lib/ruby/gems/2.1.0/gems/railties-4.1.1/lib/rails/commands/runner.rb:62:in `<top (required)>'
from /usr/local/lib/ruby/gems/2.1.0/gems/railties-4.1.1/lib/rails/commands/commands_tasks.rb:128:in `require'
from /usr/local/lib/ruby/gems/2.1.0/gems/railties-4.1.1/lib/rails/commands/commands_tasks.rb:128:in `require_command!'
from /usr/local/lib/ruby/gems/2.1.0/gems/railties-4.1.1/lib/rails/commands/commands_tasks.rb:95:in `runner'
from /usr/local/lib/ruby/gems/2.1.0/gems/railties-4.1.1/lib/rails/commands/commands_tasks.rb:40:in `run_command!'
from /usr/local/lib/ruby/gems/2.1.0/gems/railties-4.1.1/lib/rails/commands.rb:17:in `<top (required)>'
from bin/rails:4:in `require'
from bin/rails:4:in `<main>'

-----------------------------------------------------------------------------------

Gemfileファイルに以下を追加して、bundle installを実行して対応した。

gem 'nokogiri'

 

Gemパッケージのインストールとか全然知らないのだけど、普通に必要な設定のようだ。