2012-03-18 24 views
76

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

Trả lời

28

Chỉ cần yêu cầu environment.rb trong tập lệnh của bạn. Nếu kịch bản của bạn nằm ở script thư mục của Rails của bạn ứng dụng làm

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

Bạn có thể kiểm soát môi trường sử dụng (phát triển/kiểm tra/sản xuất) bằng cách thiết lập các biến môi trường RAILS_ENV khi chạy kịch bản.

RAILS_ENV=production ruby script/test.rb 
+0

Nếu tôi chạy trên mã, nó sẽ cung cấp "home/apps/config/environment". Nếu tôi có 2 ứng dụng đường ray chạy trên cùng một thư mục. Môi trường nào sẽ mất? 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ị –

+0

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

+0

yup cảm ơn nó đã làm việc cho tôi, tôi đã thêm ENV ['RAILS_ENV'] cũng như –

18

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

Từ rails runner lệ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 công việc cho các kịch bản của bạn như thế này:

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

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

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

+0

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ủ đường ray) – colsen

3

Đây là một câu hỏi cũ, nhưng theo ý kiến ​​của tôi, tôi thường tìm nó rất hữu ích để tạo ra một công việc 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à rồi trong thời gian thiết bị đầu cuối:

rake example:create_user 

tại địa phương 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.

Các vấn đề liên quan