2009-04-17 24 views
11

Tôi đang sử dụng tập lệnh shell để chạy một số tập lệnh runner trong ứng dụng Ruby on Rails. Tôi cần phải chạy nó trên các cơ sở dữ liệu sản xuất, nhưng điều sau đây:Ruby on Rails: Làm cách nào tôi có thể chỉ định môi trường tập lệnh Á hậu

#!/bin/bash 
/usr/bin/ruby RAILS_ENV=production ../script/runner ../lib/tasks.rb 

đưa ra một lỗi:

/usr/bin/ruby: No such file or directory -- RAILS_ENV=production (LoadError) 

Tôi đã cố gắng để buộc nó trong config/environment.rb

ENV['RAILS_ENV'] ||= 'production' 

hoặc thậm chí

ENV['RAILS_ENV'] = 'production' 

nhưng ngay cả khi nó vẫn chạy trong môi trường phát triển.

Cập nhật: Tôi có thể buộc các tập lệnh kết nối với đúng cơ sở dữ liệu bằng cách chỉnh sửa tệp config/database.yml, nhưng tôi tự hỏi cách thích hợp để thực hiện nó là gì.

+0

Bạn đã đọc câu trả lời của tôi không? Nó sẽ chọn môi trường của bạn một cách chính xác nếu bạn vượt qua các thông số của bạn một cách khác nhau. – Garrett

+0

Nó sẽ chạy, nhưng nó sẽ không đặt môi trường chính xác. – Goro

+0

Sau đó, có gì đó không ổn với tập lệnh của bạn, không phải lệnh. – Garrett

Trả lời

25

Sự giúp đỡ trên dòng lệnh cho kịch bản/Á hậu mang đến cho bạn câu trả lời của bạn.

script/runner -e production Model.method 
+0

Đối mặt với cùng một vấn đề. Giải pháp này làm việc cho tôi. Cảm ơn. +1 – Chirantan

+1

Không có script/runner, nhưng script/rails runner-sản xuất Model.method hoạt động cho tôi. –

+0

không phải '' script/runner -e sản xuất Model.method'' cũng không phải '' script/rails runner -e sản xuất Model.method'' làm việc cho tôi ... sau đây đã làm việc mặc dù: '' RAILS_ENV = runner sản xuất đường ray - e sản xuất Model.method'' – s2t2

5

Nếu đó là lệnh của bạn, thứ tự đối số của bạn là vấn đề lớn nhất của bạn.

/usr/bin/ruby RAILS_ENV=production ../script/runner ../lib/tasks.rb 

Khác với.

/usr/bin/ruby ../script/runner ../lib/tasks.rb RAILS_ENV=production 

Ví dụ thứ hai là tìm tệp, tệp đầu tiên đặt biến thời gian chạy trong khi Ruby giải thích tệp đó dưới dạng tệp bạn muốn chạy.

5

Nếu bạn làm lại kịch bản của bạn như thế này:

#!/bin/bash 
RAILS_ENV=production 
/usr/bin/ruby ../script/runner ../lib/tasks.rb 

... mà sẽ làm cho nó dính cho các đời của kịch bản. Để làm cho nó dính cho các đời của phiên làm việc của vỏ, thay đổi nó để

#!/bin/bash 
export RAILS_ENV=production 
/usr/bin/ruby ../script/runner ../lib/tasks.rb 
1

Bạn có thể thiết lập các biến môi trường như thế này:

RAILS_ENV=production /usr/bin/ruby ../script/runner ../lib/tasks.rb 
0
RAILS_ENV=production script/rails runner 'user = User.find(:first, :conditions => {:admin => true}) ; user.password, user.password_confirmation = "mypasswd"; user.save!' 

nó làm việc cho tôi

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