Làm cách nào để chạy tệp Ruby trong môi trường Rails?


106

Tôi muốn chạy tệp Ruby trong ngữ cảnh của môi trường Rails. rails runner gần như làm những gì tôi muốn, nhưng tôi chỉ muốn cung cấp cho nó tên tệp và các đối số. Tôi khá chắc rằng điều này là có thể vì tôi đã làm trước đây. Ai đó có thể nhắc tôi làm thế nào để làm điều này?

Câu trả lời:



36

Chỉ cần yêu cầu environment.rbtrong tập lệnh của bạn. Nếu tập lệnh của bạn nằm trong scriptthư mục của ứng dụng Rails

require File.expand_path('../../config/environment', __FILE__)

Bạn có thể kiểm soát môi trường được sử dụng (phát triển / thử nghiệm / sản xuất) bằng cách đặt RAILS_ENVbiến môi trường khi chạy tập lệnh.

RAILS_ENV=production ruby script/test.rb

Nếu tôi chạy mã trên, nó sẽ đưa ra "home / apps / config / environment". Điều gì sẽ xảy ra nếu tôi có 2 ứng dụng rails chạy trên cùng một thư mục. Nó sẽ diễn ra trong môi trường nào? tôi đang đối mặt với vấn đề này trong hộp địa phương của tôi. vui lòng đề nghị
Vijay Sali

@VijaySali Tôi giả sử rằng bạn đang chạy tập lệnh của mình từ app/scriptthư mục. Tệp môi trường sẽ được lấy từ ứng dụng riêng lẻ.
iltempo

vâng, cảm ơn nó đã làm việc cho tôi, tôi cũng đã thêm ENV ['RAILS_ENV']
Vijay Sali

26

Runner chạy mã Ruby trong ngữ cảnh Rails không tương tác.

Từ rails runnerlệnh:

Usage: runner [options] ('Some.ruby(code)' or a filename)

    -e, --environment=name           Specifies the environment for the runner to operate under (test/development/production).
                                     Default: development

    -h, --help                       Show this help message.

Bạn cũng có thể sử dụng Á hậu như một dòng shebang cho các tập lệnh của mình như sau:

-------------------------------------------------------------
#!/usr/bin/env /Users/me/rails_project/script/rails runner

Product.all.each { |p| p.price *= 2 ; p.save! }
-------------------------------------------------------------

1
Tại sao nó chỉ hoạt động khi tôi chỉ định đầy đủ "/ Users / me / rails_project / script / rails" và không chỉ "rails"? TIA
iphone007

Các lệnh đường ray khác của bạn có yêu cầu liệt kê đường dẫn đầy đủ không? (tức là máy chủ rails)
colsen

@ iphone007 có thể phụ thuộc vào nơi bạn đang chạy tập lệnh.
David Moles

7

Đây là một câu hỏi cũ, nhưng theo ý kiến ​​của tôi, tôi thường thấy hữu ích khi tạo một nhiệm vụ cào ... và nó thực sự rất dễ dàng.

Trong lib/tasks/example.rake:

namespace :example do

desc "Sample description you'd see if you ran: 'rake --tasks' in the terminal"
task create_user: :environment do
  User.create! first_name: "Foo", last_name: "Bar"
end

Và sau đó trong terminal chạy:

rake example:create_user

Tại địa phương, điều này sẽ được chạy trong bối cảnh cơ sở dữ liệu phát triển của bạn và nếu chạy trên Heroku, nó sẽ được chạy trong khi kết nối với cơ sở dữ liệu sản xuất của bạn. Tôi thấy điều này đặc biệt hữu ích để hỗ trợ di chuyển hoặc sửa đổi bảng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.