20210416のRubyに関する記事は13件です。

Ruby/Ruby on Rails 6 環境構築 *Mac OS 編*

はじめに 今回、progate にてRuby on Rails の学習を一周し終えたので環境構築にチャレンジしてみました。 が、スムーズに行かずつまずいた為その概要を書いていきたいと思います。 同じ駆け出しエンジニアの方の力に少しでもなれれば幸いです。 *Mac OSでのRails6環境構築の記事となります* ターミナルでコマンドを実行 Mac os には標準でターミナル.appが搭載されいるのでそれを使いました。 (アプリケーション/ユーティリティ/ターミナル.app にあります) Homebrewのインストール Mac os専用のパッケージ管理システムです。 Homebrew インストールできたらターミナルにて下記コマンドを入力します。 brew -v インストールできていると、この様にバージョンが表示されます。 *バージョン名は各自異なります。 Homebrew 3.1.2 Homebrew/homebrew-core (git revision e985cb6ba7; last commit 2021-04-16) rbenvのインストール ターミナルに下記コマンドを入力します。 brew install rbenv インストールができているか確認します。 rbenv --version インストールができていれば、この様にバージョンが表示されます。 *バージョン名は各自異なります。 rbenv 1.1.2 rbenvを使用できるようにPATHを通す ターミナル起動時にrbenvを自動的に起動するようにする為にパスを通します。 下記コマンドを一行ごとに入力します。 echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile echo 'if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi' >> ~/.bash_profile source ~/.bash_profile 正直ここはよく分からなかったため別記事を参考に進めました。 readlineのインストール ターミナルのirbで日本語入力ができる様になります。 下記コマンドを入力します。 brew install readline 日本語入力できる様にパスを通します。 brew link readline --force Rubyのインストール Rubyのバージョンを確認する為、下記コマンドを入力します。 rbenv install -l コマンドを実行すると、バージョン一覧が表示されます。 *バージョンは各自異なります。 2.5.9 2.6.7 2.7.3 3.0.1 jruby-9.2.17.0 mruby-2.1.2 rbx-5.0 truffleruby-21.0.0 truffleruby+graalvm-21.0.0 Only latest stable releases for each Ruby implementation are shown. Use 'rbenv install --list-all / -L' to show all local versions. インストールするバージョンを指定してコマンドを入力します。 *バージョンは各自異なります。 rbenv install 3.0.1 インストール出来ているか確認します。 ruby -v インストールができていればこの様にバージョンが表示されます。 *バージョン名は各自異なります。 ruby 3.0.1p64 (2021-04-05 revision 0fb782ee38) [x86_64-darwin20] Bundlerのインストール gemに必要な正確なバージョンを追跡してインストールしてくれます。 下記コマンドを入力します。 gem install bundler インストール出来ているか確認します。 bundler -v インストールができていればこの様にバージョンが表示されます。 *バージョン名は各自異なります。 Bundler version 2.1.4 yarnのインストール Rails6ではyarnのインストールも必要になりましたので、下記コマンドを入力してインストールします。 brew install yarn インストール出来ているか確認します。 yarn -v インストールができていればこの様にバージョンが表示されます。 *バージョン名は各自異なります。 1.22.10 私はここでつまづきました...。 Rails6ではWebpackerが標準になったことにより、yarnが必要になったそうです。 いくらRailsをコマンドを実行してもインストールできず、ググっても出来ず...。 結果調べて試していたのは、Rails5のインストール手順でyarnのインストールをしていなかったから出来なかっただけでした。 常に最新情報に耳を傾け、調べる力も付けていく必要があること改めて実感しました...。 Railsのインストール インストールするバージョンを指定してコマンドを入力します。 今回は-v 6.0.3.4を指定します。 gem install rails -v 6.0.3.4 インストール出来ているか確認します。 rails -v インストールができていればこの様にバージョンが表示されます。 バージョン名は各自違います。 Rails 6.0.3.4 以上 Ruby / Rails の環境構築となります。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

requireの使い方

requireメソッド 送信されたパラメーターの情報を持つparamsが、使用できるメソッド。 requireメソッドは、パラメーターからどの情報を取得するか、選択する。 params.require(:モデル名) requireを使うのはパラメーターが二重ハッシュの時のみ。 [1] pry(#<OrdersController>)> params => <ActionController::Parameters {"authenticity_token"=>"dIFiIxMsjPdq0lATAzwoZgYl/LKtBrD1Zsoo gqyCDoVhXGqCAQHoVSWIkvkMhuXn+ooywt50eQJiCfcCniJamQ==", "hoge"=>"", "post_code"=>"111-1111", "shipping_area_id"=>"3", "municipality"=>"aa", "address"=>"aa", "building_name"=>"", "phone_number"=>"00000000000", "commit"=>"購入", "controller"=>"orders", "action"=>"create", "item_id"=>"2"} permitted: false> この場合だとハッシュは一つなのでrequireは使えない。 [1] pry(#<OrdersController>)> params => <ActionController::Parameters {"authenticity_token"=>"dIFiIxMsjPdq0lATAzwoZgYl/LKtBrD1Zso ogqyCDoVhXGqCAQHoVSWIkvkMhuXn+ooywt50e QJiCfcCniJamQ==","user_purchases"=>{ "hoge"=>"", "post_code"=>"111-1111", "shipping_area_id"=>"3", "municipality"=>"aa", "address"=>"aa", "building_name"=>"", "phone_number"=>"00000000000"}, "commit"=>"購入", "controller"=>"orders", "action"=>"create", "item_id"=>"2"} permitted: false> このような場合だと二重ハッシュなのでrequireを使うことになる。 二重ハッシュになる場合はモデルを指定した時に生成される。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Herokuでデプロイする手順

手順 Heroku CLIをインストール brew tap heroku/brew && brew install heroku その後、完了を確認するため heroku --version heroku/7.40.0 darwin-x64 node-v12.16.2 #このようにバージョンが表示されていると良い Herokuにログイン heroku login --interactive Heroku上にアプリ作成 heroku create アプリ名 その後、確認のため git config --list | grep heroku Heroku上でMySQLを使えるようにする heroku addons:add cleardb #ClearDBアドオンを追加 その後、ClearDBデータベースのURLを変数heroku_cleardbに格納する heroku_cleardb=`heroku config:get CLEARDB_DATABASE_URL` Heroku上で環境変数を設定する heroku config:set RAILS_MASTER_KEY=`cat config/master.key` 環境変数一覧を表示する heroku config #RAILS_MASTER_KEYが設定されていれば良い 動作環境を変更する heroku stack:set heroku-18 -a #Herokuで利用するStackを指定 Herokuへアプリを追加 git push heroku master その後、Heroku上でマイグレーションファイルを実行 heroku run rails db:migrate  コマンド一覧 heroku apps:info → 公開されたアプリの詳細をみる heroku logs --tail --app アプリ名 → ログを表示する  補足情報 Herokuでは、定期的に画像のデータなどがリセットされるため、出品から一定時間経過した商品画像は適切に表示されなくなる。適切に表示されなくなった画像のデータを消すためには、下記コマンドを用いてデータベースをリセットすることが必要(最後にS3を導入することで、商品画像が適切に表示されなくなる問題は解消される)。 % heroku run DISABLE_DATABASE_ENVIRONMENT_CHECK=1 rails db:drop db:create db:migrate
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

deviseに追加したカラムを保存する方法

概要 deviseはデフォルトでemailやpasswordのカラムは入っている。しかし、nameやnicknameなど新しくカラムを追加した際、以下の手順で保存を行えるようにする app/controllers/application_controller.rb class ApplicationController < ActionController::Base class ApplicationController < ActionController::Base before_action :configure_permitted_parameters, if: :devise_controller? private def configure_permitted_parameters devise_parameter_sanitizer.permit(:sign_up, keys: [:name, :nickname]) end end end 上記のkeysの中に追加したカラム名を入れることによって保存が行えるようになる。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

win32oleを使って、Excelファイルを開く

環境 ruby 2.4.1p111 Windows10 Pro はじめに 恐らく、殆どの企業では、Excel文化がまだまだ根強かったりする事でしょう。ファイルサーバーにExcelファイルを置いて、共有使用しているケースも普通だと思います。他の人が開いていたら、更新ができないというジレンマがあったり、自分が長時間開いていたら、気まずかったりもします。そこで、ファイルサーバーにあるExcelファイルを参照する場合は、ローカル環境にコピーしてきて、そこで、ゆっくり参照するといったやり方を時々します。この一連の作業をRubyで自動化させてみました。 やっている事は、ファイルサーバーにExcelファイルをローカル環境にコピーして、指定したシートを開くといった流れになります。Rubyソースは、バッチでコマンドを打って流しますが、割とサックリ観があって便利だったりします。 そのRubyの作り方の解説です。Excelを扱うgemはいくつかあるようですが、win32oleを利用しました。gemの名前から想像できるように、このgemは、Windows上でしか利用できない事になります。 解説 PATH変数にはExcelファイルのコピー元とコピー先のパスを指定します。FILE変数には、Excelファイルのファイル名を指定します。ローカル環境にはリネームしてコピーするようにしています。SHEET変数には、初期表示したいExcelのシート名を指定します。 Excel VBA定数のロードします。(おまじないのように) module Excel; end Excelオブジェクト生成します。 excel = WIN32OLE.new('Excel.Application') 表示可にして、メッセージは非表示にします。 excel.visible = true excel.displayAlerts = false Excelを起動します。 WIN32OLE.const_load(excel, Excel) ExcelをOpenします。 book = excel.Workbooks.Open("#{PATH_L}#{FILE_L}") 指定したシートをアクティブにします。(上記の記述はググれば、情報は出てくるのですが、ここのやり方がググってもネットであまり流れてないようだったので、参考になるかな?) sheet = book.sheets("#{SHEET}") sheet.Activate 全ソース require "fileutils" require 'win32ole' PATH_S = '\\\192.168.19.12\share\\' PATH_L = 'D:\\' FILE_S = 'エクセルファイル.xlsx' FILE_L = 'エクセルファイル_ローカル.xlsx' SHEET = 'ユーザー一覧' module Excel; end def excel_init? begin excel = WIN32OLE.new('Excel.Application') excel.visible = true excel.displayAlerts = false WIN32OLE.const_load(excel, Excel) puts "#{PATH_L}#{FILE_L}" book = excel.Workbooks.Open("#{PATH_L}#{FILE_L}") sheet = book.sheets("#{SHEET}") sheet.Activate true rescue => e puts "例外エラーが発生しました => " + e.message.to_s false end end def get_file? unless File.exist?("#{PATH_S}#{FILE_S}") false else FileUtils.cp("#{PATH_S}#{FILE_S}","#{PATH_L}#{FILE_L}") true end end unless get_file? puts "コピー元ファイルが存在しません。" else puts "コピーOK" end puts "正常終了しました。" if excel_init? exit C'est fini
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[カラム重複によるerror]Mysql2::Error: Duplicate column name ''カラム名"

概要 ターミナルで「rails db:migrate」を入力した際に起きたerror。インターネットで調べてみるとカラムが重複していることが原因だった。 原因 db/migrateを調べるとemailカラムが重複していた qiita.rb t.string :email, null: false, default: "" t.string :email, null: false, default: "" 改善方法 rails db:rollbackでマイグレーションファイルをdownさせる →重複している内容を削除し、データを1つにする →rails db:migrateする。以上のことでerrorが改善された。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

seleniumでeachなどで作られた一覧の要素全てに対して操作をする

seleniumでeachなどで作られた一覧の要素全てに対して操作をする  例えば「投稿一覧」のような画面で各投稿を1つずつクリックして開きたい時のパターンを想定。 操作する要素の例  こんな感じのやつを想定。多分よくあるやつ。  各post以下のlinkを1つずつ全てクリックしたい。 div class="index" div class="post" p hoge class="title" a class="link" div class="post" p huga class="title" a class="link" div class="post" p hugahoge class="title" a class="link" 取得し直すごとにオブジェクトが変わる場合がある  Selenium::WebDriver::Elementオブジェクトのfind_elementsは要素を取得し直すごとに各種値が変わってしまう場合がある。 # 子要素に対してクリック操作をしたいループ @driver.find_elements(:class, "index").each do |element| element.find_element(:class, "hoge").click end # 1回目の取得 > @driver.find_elements(:class, "index") [#<Selenium::WebDriver::Element:0x..f693ec4bf80c6eee id="2d75628b-0b8f-4d92-a7db-7e242210b403">, #<Selenium::WebDriver::Element:0xbc5fe1f4062f650 id="462b6e29-ef2f-4f1f-bad4-5acb980c74e5">, #<Selenium::WebDriver::Element:0x687a1921db97e860 id="193e8b33-669a-4381-8b74-039dcd379dd5">] # 要素を一つクリックして新しいタブで開く > element.find_element(:class, "hoge").click # 2回目の取得 > @driver.find_elements(:class, "index") => [#<Selenium::WebDriver::Element:0x..f9a79e5201fcda17a id="08f92ae9-4ecc-4af0-b98b-94eb2bd9b843">, #<Selenium::WebDriver::Element:0x..fd075870720e89f2a id="a2d55dd1-1fab-4918-b95e-dfde8b2da705">, #<Selenium::WebDriver::Element:0x..fd3599185fcb5576a id="375c0957-1cfd-485f-be29-b8397d9ec2f1">] # ループ2回目では以下のエラーが出る Selenium::WebDriver::Error::StaleElementReferenceError: stale element reference: element is not attached to the page document 上記の場合の対処方法の例  取得するごとにオブジェクト番号が変わってしまっては雑にeachで回してクリックすることはできなくなる。なので、以下のように対処した。 current_window = @driver.window_handles.first # 要素の総数を取得 index_elements_count = @driver.find_elements(:class, "index").count index_elements_count.times do |time| @driver.find_elements(:class, "index")[time].find_element(class: "link").click @driver.switch_to.window(current_window) end  これなら@driver.find_elements(:class, "index")の値がループごとに変わっても、配列のtime番目から取得するので問題ない。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Rails ActionCable チャット機能 処理の流れ

はじめに ポートフォリオ作成中の初学者です。 ポートフォリオにActionCableを使った「チャット機能」を導入しました。 ネット上に素晴らしい記事がたくさんあり、実装することはできましたが、 なぜ、そのような書き方なのか、どのような処理の順番なのかなど 理解不十分な部分が多々あった為、今回は処理の流れをメインに備忘録としてここに残します。 ポートフォリオ作成完了後に時間があれば、まとめなおそうと思っています。 ※他の勉強もしたいですが、アウトプットも大事。 知識が乏しく、間違った解釈をしている箇所がありましたら、コメントいただけると幸いです。 開発環境 ・ruby: 2.6.3 ・rails: 5.2.4.5 ・OS: macOS Catalina ver10.15.7 ・Cloud9 ※最近ではRails6でのActionCable実装記事もあります。 前提条件 ・devise導入 ・チャットルームとメッセージの名前はこちら ※テーブル名やカラム名は他記事と異なるかもしれません。 schema.rb create_table "direct_messages", force: :cascade do |t| t.integer "user_id", null: false t.integer "room_id", null: false t.string "message", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false end create_table "rooms", force: :cascade do |t| t.string "name", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false end 他には room.rb rooms_controller.rb direct_message.rb direct_messages.rb room.coffee room_channel.rb direct_message_broadcast_job など 処理の流れ 1: WebSocketによる通信を行う前に一度HTTP通信を行う (サーバーを立ち上げた瞬間) ハンドシェイクという処理 ブラウザ上から「upgrade」というリクエストを行う ↓ サーバー側から「101 Switching Protocols」というレスポンスがくる ↓ これが終わるとそれ以降のデータのやり取りはWebSocketプロトコル上で行われる 2: WebSocketコネクションを確立させるか判断する (connection.rb内でユーザーidを元に、確立させていいか判断している) 3: 指定したchannelをsubscribeする (room_channel内でsubscribedメソッドを実行) subscribedメソッドでは、 サーバー側で受け取った内容をどこに配信(ブロードキャスト)するかを定義している 4: 入力フォームにテキストを入力し、エンターキーを押すとイベントが発火する (room.coffee内) 5: room.coffee内のspeakアクションが呼び出される speakアクションでサーバー側(room_channel.rb)のspeakアクションを呼び出す ※紛らわしいので注意 クライアントサイドのspeakメソッドで、サーバーサイドのspeakメソッドを呼び出している 6: speakアクションでdirect_messageをcreateする (room_channel.rb内) 7: after_create_commitメソッドにより、direct_message_broadcast_job.rbのpeformアクションを呼び出す (direct_message.rb内) 8: subscribedメソッドで決めた場所にデータを配信(ブロードキャスト)する (direct_message_broadcast_job.rb) 9: ブロードキャストを介して、room.coffeeのrecievedメソッドにデータが渡される 10: 受け取ったdirect_message(入力されたメッセージ)を(idがdirect_messageの箇所)にappendする(HTML要素を追加する) (room.coffee内) 専門用語 cousumer(コンシューマ):ユーザーが開くブラウザ1つ1つのこと connection(コネクション):consumerとサーバーのつながり subscribe(サブスクライブ):consumerがchannelと繋がること subscriber(サブスクライバー):channelとつながったconsumerをさす brodecast(ブロードキャスト):サーバーがsubscriberにデータを送ること channel(チャネル):コントローラ的役割(機能毎に分ける) publisher(パブリッシャ):実際に通信を発信するところ(Rails内) broadcast(ブロードキャスト):パブリッシャが出す通信(ストリームに対して) stream(ストリーム):ブロードキャストをサブスクライバーに転送すること コード一覧 connection.rb module ApplicationCable class Connection < ActionCable::Connection::Base # 処理① # ハンドシェイク後、WebSocket通信を確立させるか判断する identified_by :current_user def connect self.current_user = find_verified_user end protected def find_verified_user #ユーザーidで認証する verified_user = User.find_by(id: env['warden'].user.id) # 認証したユーザー(verified_user)出ない限りはreturn return reject_unauthorized_connection unless verified_user verified_user end end end room_channel.rb class RoomChannel < ApplicationCable::Channel # 処理② # サーバー側で受け取った内容をどこに配信するかを定義している # room_channel_1,room_channel_2...とparams['room']にはroomのidが入る # つまり、部屋毎にその部屋にアクセスした人クライアントに配信している def subscribed # stream_from "some_channel" stream_from "room_channel_#{params['room']}" end def unsubscribed # Any cleanup needed when channel is unsubscribed end # 処理⑤ def speak(data) direct_message = DirectMessage.create! message: data['direct_message'], user_id: current_user.id, room_id: params['room'] end end room.coffee document.addEventListener 'turbolinks:load', -> if App.room App.cable.subscriptions.remove App.room # サーバー側のチャネルをcreate # 引数のRoomChannel = app/channels/room_channel.rbで指定されるサーバー側のチャネルにクライアント側から接続する App.room = App.cable.subscriptions.create { channel: "RoomChannel", room: $('#direct_messages').data('room_id') }, connected: -> disconnected: -> # 処理⑧ # サーバー側から送られてきたデータを引数dataで受け取る # 受け取ったdirect_message(入力されたメッセージ)を(idがdirect_messageの箇所)にappendする(HTML要素を追加する) received: (data) -> $('#direct_messages').append data['direct_message'] # 処理④ # room_channel.rbのspeakメソッドを呼び出している speak: (direct_message) -> @perform 'speak', direct_message: direct_message # 処理③ # data-behavior属性がroom_speakerである入力フォームでのキーボード入力イベントで発火 $(document).on 'keypress', '[data-behavior~=room_speaker]', (event) -> if event.keyCode is 13 # 入力されたメッセージを送信する処理をサーバー側に求める App.room.speak event.target.value # サーバー側に処理をお願いした為、入力フォームを空にする(valueで初期値を空に) event.target.value = '' # サーバー側に処理をお願いした為、入力フォームでのデータ送信(クライアント側でのフォーム送信)処理は止める # preventDefault:直前のイベントをキャンセルという意味 event.preventDefault() direct_message.rb class DirectMessage < ApplicationRecord belongs_to :user belongs_to :room has_many :notifications, dependent: :destroy validates :message, presence: true # 処理⑥ after_create_commit { DirectMessageBroadcastJob.perform_later self } end direct_message_broadcast_job.rb class DirectMessageBroadcastJob < ApplicationJob queue_as :default # 処理⑦ def perform(direct_message) ActionCable.server.broadcast "room_channel_#{direct_message.room_id}", direct_message: render_direct_message(direct_message) end private def render_direct_message(direct_message) ApplicationController.renderer.render(partial: 'public/direct_messages/direct_message', locals: { direct_message: direct_message }) end end さいごに なぐり書きですが、一人でも誰かの参考になれば嬉しいです。 閲覧ありがとうございました。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

sketchupでruby その3

概要 sketchupでrubyやってみた。 sin波やってみた。 サンプルコード def sin_ha model = Sketchup.active_model entities = model.active_entities px = -30 py = 0 -30.step(30, 0.01){ |i| x = i y = Math::sin(i) * 20 line1 = entities.add_line [px, 0, py], [x, 0, y] px = x py = y } end 実行結果 以上。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

sketchupでruby その2

概要 sketchupでrubyやってみた。 zundokoやってみた。 サンプルコード def zundoko words = [] def zd word = (rand(2) == 0) ? "zun" : "doko" puts word return word end while true words.push zd ans = words[-5, 5] if ans == ["zun", "zun", "zun", "zun", "doko"] puts "kiyosi!" break end end end 実行結果 zundoko zun doko doko doko doko doko zun zun zun doko zun doko doko doko doko doko doko doko doko zun zun doko zun doko zun zun doko zun doko zun zun zun doko zun zun zun zun zun doko kiyosi! nil 以上。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

rails tでMissingHelperError、rails g controllerでalready usedとエラーが出た場合の解決方法

解決方法 IDEを再起動しrails destroy controllerとrails generate controller を実行したところエラーは解消されました。 エラー発生から解決までの手順 rails test実行時、ヘルパーが無いというエラーが発生しました。 ubuntu:~/environment/sample_app (following-users-redo) $ rails t Running via Spring preloader in process 15498 Traceback (most recent call last): 47: from -e:1:in `<main>' 46: from /home/ubuntu/.rvm/rubies/ruby-2.6.3/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require' 45: from /home/ubuntu/.rvm/rubies/ruby-2.6.3/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require' 44: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:54:in `load' 43: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:54:in `load' 42: from /home/ubuntu/environment/sample_app/bin/rails:9:in `<main>' 41: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/zeitwerk-2.4.0/lib/zeitwerk/kernel.rb:34:in `require' 40: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in `require' 39: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:21:in `require_with_bootsnap_lfi' 38: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/loaded_features_index.rb:92:in `register' 37: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `block in require_with_bootsnap_lfi' 36: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require' 35: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/railties-6.0.3/lib/rails/commands.rb:18:in `<main>' 34: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/railties-6.0.3/lib/rails/command.rb:46:in `invoke' 33: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/railties-6.0.3/lib/rails/command/base.rb:69:in `perform' 32: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/thor-1.0.1/lib/thor.rb:392:in `dispatch' 31: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/thor-1.0.1/lib/thor/invocation.rb:127:in `invoke_command' 30: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/thor-1.0.1/lib/thor/command.rb:27:in `run' 29: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/railties-6.0.3/lib/rails/commands/test/test_command.rb:33:in `perform' 28: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/railties-6.0.3/lib/rails/test_unit/runner.rb:39:in `run' 27: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/railties-6.0.3/lib/rails/test_unit/runner.rb:50:in `load_tests' 26: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/railties-6.0.3/lib/rails/test_unit/runner.rb:50:in `each' 25: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/railties-6.0.3/lib/rails/test_unit/runner.rb:50:in `block in load_tests' 24: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/zeitwerk-2.4.0/lib/zeitwerk/kernel.rb:34:in `require' 23: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in `require' 22: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:21:in `require_with_bootsnap_lfi' 21: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/loaded_features_index.rb:92:in `register' 20: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `block in require_with_bootsnap_lfi' 19: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require' 18: from /home/ubuntu/environment/sample_app/test/helpers/application_helper_test.rb:3:in `<main>' 17: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/zeitwerk-2.4.0/lib/zeitwerk/kernel.rb:34:in `require' 16: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in `require' 15: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:21:in `require_with_bootsnap_lfi' 14: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/loaded_features_index.rb:92:in `register' 13: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `block in require_with_bootsnap_lfi' 12: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require' 11: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/actionview-6.0.3/lib/action_view/test_case.rb:10:in `<main>' 10: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/actionview-6.0.3/lib/action_view/test_case.rb:12:in `<module:ActionView>' 9: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/actionview-6.0.3/lib/action_view/test_case.rb:13:in `<class:TestCase>' 8: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/actionpack-6.0.3/lib/action_controller/railties/helpers.rb:19:in `inherited' 7: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/actionpack-6.0.3/lib/abstract_controller/helpers.rb:109:in `helper' 6: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/actionpack-6.0.3/lib/action_controller/metal/helpers.rb:94:in `modules_for_helpers' 5: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/actionpack-6.0.3/lib/abstract_controller/helpers.rb:145:in `modules_for_helpers' 4: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/actionpack-6.0.3/lib/abstract_controller/helpers.rb:145:in `map!' 3: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/actionpack-6.0.3/lib/abstract_controller/helpers.rb:150:in `block in modules_for_helpers' 2: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/activesupport-6.0.3/lib/active_support/dependencies/zeitwerk_integration.rb:51:in `require_dependency' 1: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/zeitwerk-2.4.0/lib/zeitwerk/kernel.rb:34:in `require' /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:33:in `require': cannot load such file -- relationships_helper (LoadError) 45: from -e:1:in `<main>' 44: from /home/ubuntu/.rvm/rubies/ruby-2.6.3/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require' 43: from /home/ubuntu/.rvm/rubies/ruby-2.6.3/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require' 42: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:54:in `load' 41: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:54:in `load' 40: from /home/ubuntu/environment/sample_app/bin/rails:9:in `<main>' 39: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/zeitwerk-2.4.0/lib/zeitwerk/kernel.rb:34:in `require' 38: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in `require' 37: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:21:in `require_with_bootsnap_lfi' 36: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/loaded_features_index.rb:92:in `register' 35: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `block in require_with_bootsnap_lfi' 34: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require' 33: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/railties-6.0.3/lib/rails/commands.rb:18:in `<main>' 32: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/railties-6.0.3/lib/rails/command.rb:46:in `invoke' 31: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/railties-6.0.3/lib/rails/command/base.rb:69:in `perform' 30: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/thor-1.0.1/lib/thor.rb:392:in `dispatch' 29: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/thor-1.0.1/lib/thor/invocation.rb:127:in `invoke_command' 28: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/thor-1.0.1/lib/thor/command.rb:27:in `run' 27: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/railties-6.0.3/lib/rails/commands/test/test_command.rb:33:in `perform' 26: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/railties-6.0.3/lib/rails/test_unit/runner.rb:39:in `run' 25: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/railties-6.0.3/lib/rails/test_unit/runner.rb:50:in `load_tests' 24: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/railties-6.0.3/lib/rails/test_unit/runner.rb:50:in `each' 23: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/railties-6.0.3/lib/rails/test_unit/runner.rb:50:in `block in load_tests' 22: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/zeitwerk-2.4.0/lib/zeitwerk/kernel.rb:34:in `require' 21: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in `require' 20: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:21:in `require_with_bootsnap_lfi' 19: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/loaded_features_index.rb:92:in `register' 18: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `block in require_with_bootsnap_lfi' 17: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require' 16: from /home/ubuntu/environment/sample_app/test/helpers/application_helper_test.rb:3:in `<main>' 15: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/zeitwerk-2.4.0/lib/zeitwerk/kernel.rb:34:in `require' 14: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in `require' 13: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:21:in `require_with_bootsnap_lfi' 12: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/loaded_features_index.rb:92:in `register' 11: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `block in require_with_bootsnap_lfi' 10: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require' 9: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/actionview-6.0.3/lib/action_view/test_case.rb:10:in `<main>' 8: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/actionview-6.0.3/lib/action_view/test_case.rb:12:in `<module:ActionView>' 7: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/actionview-6.0.3/lib/action_view/test_case.rb:13:in `<class:TestCase>' 6: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/actionpack-6.0.3/lib/action_controller/railties/helpers.rb:19:in `inherited' 5: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/actionpack-6.0.3/lib/abstract_controller/helpers.rb:109:in `helper' 4: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/actionpack-6.0.3/lib/action_controller/metal/helpers.rb:94:in `modules_for_helpers' 3: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/actionpack-6.0.3/lib/abstract_controller/helpers.rb:145:in `modules_for_helpers' 2: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/actionpack-6.0.3/lib/abstract_controller/helpers.rb:145:in `map!' 1: from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/actionpack-6.0.3/lib/abstract_controller/helpers.rb:149:in `block in modules_for_helpers' /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/actionpack-6.0.3/lib/abstract_controller/helpers.rb:152:in `rescue in block in modules_for_helpers': Missing helper file helpers/relationships_helper.rb (AbstractController::Helpers::MissingHelperError) ubuntu:~/environment/sample_app (following-users-redo) $ ですがrelationships_helper.rb は既に存在しています。 直前でrails generate controller 実行したためここでエラーが発生したことを疑い、生成したファイルを削除します。 ubuntu:~/environment/sample_app (following-users-redo) $ rails destroy controller Relationships Running via Spring preloader in process 15967 remove app/controllers/relationships_controller.rb invoke erb remove app/views/relationships invoke test_unit remove test/controllers/relationships_controller_test.rb invoke helper remove app/helpers/relationships_helper.rb invoke test_unit invoke assets invoke scss remove app/assets/stylesheets/relationships.scss ubuntu:~/environment/sample_app (following-users-redo) $ 再度rails testを実行したところエラーは発生しなくなりました。 ubuntu:~/environment/sample_app (following-users-redo) $ rails t Running via Spring preloader in process 16013 Started with run options --seed 28970 63/63: [===========================================================] 100% Time: 00:00:06, Time: 00:00:06 Finished in 6.37105s 63 tests, 294 assertions, 0 failures, 0 errors, 0 skips ubuntu:~/environment/sample_app (following-users-redo) $ ところが再度rails generate controller したところ下記エラーが発生しました。 ubuntu:~/environment/sample_app (following-users-redo) $ rails generate controller Relationships Running via Spring preloader in process 16096 create app/controllers/relationships_controller.rb invoke erb create app/views/relationships invoke test_unit create test/controllers/relationships_controller_test.rb invoke helper The name 'RelationshipsHelper' is either already used in your application or reserved by Ruby on Rails. Please choose an alternative or use --force to skip this check and run this generator again. ubuntu:~/environment/sample_app (following-users-redo) $ "RelationshipsHelperという名前は、アプリケーションですでに使用されているか、Ruby on Railsによって予約されています。代替案を選択するか、--forceを使用してこのチェックをスキップし、再度このジェネレータを実行してください。" IDEを再起動しrails destroy controllerとrails generate controller を実行したところエラーは解消されました。 ubuntu:~/environment/sample_app (following-users-redo) $ rails destroy controller Relationships Running via Spring preloader in process 4130 remove app/controllers/relationships_controller.rb invoke erb remove app/views/relationships invoke test_unit remove test/controllers/relationships_controller_test.rb invoke helper remove app/helpers/relationships_helper.rb invoke test_unit invoke assets invoke scss remove app/assets/stylesheets/relationships.scss ubuntu:~/environment/sample_app (following-users-redo) $ rails generate controller Relationships Running via Spring preloader in process 4153 create app/controllers/relationships_controller.rb invoke erb create app/views/relationships invoke test_unit create test/controllers/relationships_controller_test.rb invoke helper create app/helpers/relationships_helper.rb invoke test_unit invoke assets invoke scss create app/assets/stylesheets/relationships.scss なぜこの手順で解決できたかまでは詰めることができませんでした。 調べたところ同じような事象で解決されている方がいましたが、場合によって解決方法が異なるようでした。 参考: https://qiita.com/KuroganeHey/items/962fc74669ef7f4221dd
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

sketchupでruby

概要 sketchupでrubyやってみた。 fizzbuzzやってみた。 環境 windows vista 32bit sketchup 8.0 rubyのバージョン確認 print RUBY_VERSION 1.8.6 サンプルコード def fizzbuzz for i in 1..99 if i % 15 == 0 puts "FizzBuzz" elsif i % 3 == 0 puts "Fizz" elsif i % 5 == 0 puts "Buzz" else puts i end end end 実行結果 fizzbuzz 1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz 16 17 Fizz 19 Buzz Fizz 22 23 Fizz Buzz 26 Fizz 28 29 FizzBuzz 31 32 Fizz 34 Buzz Fizz 37 38 Fizz Buzz 41 Fizz 43 44 FizzBuzz 46 47 Fizz 49 Buzz Fizz 52 53 Fizz Buzz 56 Fizz 58 59 FizzBuzz 61 62 Fizz 64 Buzz Fizz 67 68 Fizz Buzz 71 Fizz 73 74 FizzBuzz 76 77 Fizz 79 Buzz Fizz 82 83 Fizz Buzz 86 Fizz 88 89 FizzBuzz 91 92 Fizz 94 Buzz Fizz 97 98 Fizz 1..99 以上。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

クラスとインスタンス

定義 class あるものを作る時の設計図のこ設計図のこと class クラス名  #(処理の内容) end インスタンス 設計図からつくられた「もの」のこと 処理の手順 ① クラスの作成 ② クラス内に情報を書き込む ③ クラスを元にインスタンスを作る ④ インスタンスに情報を与える 実例 class Human attr_accessor :name attr_accessor :Height end human = Human.new human.name = A太郎
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む