запуск команди curl всередині рейки програми


0

Я намагаюсь виконати команду curl всередині мого додатка rails. Мій додаток для рейків просто створює квиток, і для цього мені потрібно ввести певну інформацію.

Коли людина натискає кнопку "Зберегти", вона зберігає дані, введені в БД. Тепер я намагаюся запустити сценарій згортання кожного разу, коли користувач натискає кнопку "Зберегти".

**tickets_controller.rb**

Code without Curl Script: 
def create
@ticket = Ticket.new(ticket_params)

respond_to do |format|
  if @ticket.save
    format.html { redirect_to @ticket, notice: 'Ticket was successfully created.' }
    format.json { render :show, status: :created, location: @ticket }
  else
    format.html { render :new }
    format.json { render json: @ticket.errors, status: :unprocessable_entity }
  end
 end
end 

коли я натискаю кнопку "Зберегти", він вводить дані в мій БД і показує це у файлі журналу:

 Started POST "/tickets" for 127.0.0.1 at 2017-01-18 10:58:21 -0500
 Processing by TicketsController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"8L7gmdNZSJ389YpnyYsp4j5F+3lzaTQIP4fo+FZn6h9Qp6u2bA0cXstDLw2vX2fAPHCzKSgijwoDU0UHr+TT2g==", "ticket"=>{"record_id"=>"m2", "seat_id_seq"=>"m2", "address"=>"m2", "price_paid"=>"m2", "email_address"=>"m2"}, "commit"=>"Create Ticket"}
 (0.1ms)  begin transaction
 SQL (0.4ms)  INSERT INTO "tickets" ("record_id", "seat_id_seq", "address", "price_paid", "email_address", "created_at", "updated_at") VALUES (?, ?, ?, ?, ?, ?, ?)  [["record_id", "m2"], ["seat_id_seq", "m2"], ["address", "m2"], ["price_paid", "m2"], ["email_address", "m2"], ["created_at", "2017-01-18 15:58:21.219802"], ["updated_at", "2017-01-18 15:58:21.219802"]]
 (181.4ms)  commit transaction
 Redirected to http://localhost:3000/tickets/2
 Completed 302 Found in 189ms (ActiveRecord: 181.9ms)

Тепер у мене є сценарій curl, який фактично вводить дані в інший проект:

curl -F token='08F14AE57696E458BA6FC6A203F57E69' -F overwriteBehavior=normal -F content=record -F type=flat -F format=json -F data='[{"record_id":"bbc","seat_id_seq":"bbb","address":"bbb","price":"bbb","email":"bbb","tickets1_complete":"2"}]'  'https://cri-datacap.org/api/'

Це прекрасно працює і вводить дані в інший проект, коли я запускаю це в командному рядку. Тепер я об'єдную цей код у свій проект рейлів (квитки), і кожного разу, коли людина натискає кнопку збереження, цей сценарій повинен виконувати та вводити дані в інший проект.

def create
@ticket = Ticket.new(ticket_params)

respond_to do |format|
  if @ticket.save
  %x{ curl -F token='08F14AE57696E458BA6FC6A203F57E69' -F overwriteBehavior=normal -F content=record -F type=flat -F format=json -F data='[{"record_id":"bbc","seat_id_seq":"bbb","address":"bbb","price":"bbb","email":"bbb","tickets1_complete":"2"}]'  'https://cri-datacap.org/api/' }
    format.html { redirect_to @ticket, notice: 'Ticket was successfully created.' }
    format.json { render :show, status: :created, location: @ticket }
  else
    format.html { render :new }
    format.json { render json: @ticket.errors, status: :unprocessable_entity }
  end
 end
end 

Тепер, коли я запускаю цю програму і натискає кнопку збереження, вона створює квиток і вводить дані квитка в DB-файл rails_application. Але цей сценарій згортання не виконує успішно і вводить дані в інший проект.

ось файл журналу:

 Started POST "/tickets" for 127.0.0.1 at 2017-01-18 10:56:13 -0500
 Processing by TicketsController#create as HTML
 Parameters: {"utf8"=>"✓", "authenticity_token"=>"foxFimIFUbuuG4OHc2ve5+6melaNL+PtemsM2tOihNTelQ6l3VEFeJmtJu0Vv5DF7JMyBtZkWO9Gv6ElKiG9EQ==", "ticket"=>{"record_id"=>"m1", "seat_id_seq"=>"m1", "address"=>"m1", "price_paid"=>"m1", "email_address"=>"m1"}, "commit"=>"Create Ticket"}
 (0.1ms)  begin transaction
 SQL (96.3ms)  INSERT INTO "tickets" ("record_id", "seat_id_seq", "address", "price_paid", "email_address", "created_at", "updated_at") VALUES (?, ?, ?, ?, ?, ?, ?)  [["record_id", "m1"], ["seat_id_seq", "m1"], ["address", "m1"], ["price_paid", "m1"], ["email_address", "m1"], ["created_at", "2017-01-18 15:56:13.416939"], ["updated_at", "2017-01-18 15:56:13.416939"]]
  (243.2ms)  commit transaction
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                  Dload  Upload   Total   Spent    Left  Speed
100   796  100    12  100   784     30   2000 --:--:-- --:--:-- --:--:--  2000
Redirected to http://localhost:3000/tickets/1
Completed 302 Found in 1039ms (ActiveRecord: 339.6ms)

EDIT

Гей, тепер його запуску цього запиту та введення даних в інший проект .. чи може хтось підказати мені, що є спосіб, як я можу використовувати змінні замість твердо кодованого значення у сценарії:

 %x{ curl -F token='08F14AE57696E458BA6FC6A203F57E69' -F overwriteBehavior=normal -F content=record -F type=flat -F format=json -F data='[{"record_id":"bbc2","seat_id_seq":"bbb","address":"bbb","price":"bbb","email":"bbb","tickets1_complete":"2"}]'  'https://cri-datacap.org/api/' }

У цьому сценарії, як я можу використовувати значення, які я ввожу для свого проекту рейкових квитків, насправді я хочу отримати інформацію, яку користувачі вводять у текстові поля мого рельсового проекту до іншого проекту. він увійшов, повинен перейти до іншої БД проекту.

змінні в моєму рейковому проекті:

    def ticket_params
       params.require(:ticket).permit(:record_id, :seat_id_seq, :address, :price_paid, :email_address)
    end

Відповіді:


0

Ви майже це маєте. Потрібно змінити одиничні лапки на подвійні лапки, щоб ви могли використовувати рубінову інтерполяцію, а потім уникнути всіх лапок у завитку, щоб вони потрапили в інтерполяцію у заключний рядок. Це некрасиво, але виглядає приблизно так:

 %x{ curl -F token='08F14AE57696E458BA6FC6A203F57E69' 
     -F overwriteBehavior=normal -F content=record -F type=flat 
     -F format=json 
     -F data="[{\"record_id\":\"#{record_id}\", \"seat_id_seq\":\"#{seat_id_seq}\", \"address\":\"#{address}\", \"price\":\"#{price_paid}\", \"email\":\"#{email_address}\", "\"tickets1_complete\":\"2\"}]"
     'https://cri-datacap.org/api/' }

Ви також можете зробити це трохи акуратніше, як це:

require 'json'
h=[{ record_id: record_id, seat_id_seq: seat_id_seq, address: address,
     price: price_paid, email: email_address, tickets1_complete: 2 }]
%x{ curl -F token='08F14AE57696E458BA6FC6A203F57E69' -F
    overwriteBehavior=normal -F content=record -F type=flat 
    -F format=json } +
    ['-F', "data=\"#{h.to_json}\"", 'https://cri-datacap.org/api/']

Я не в змозі повністю цього зробити, тож вам може знадобитися трохи жонглювати цитатами, але це ідея.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.